#objective-c #ios #core-data #uiimage
#objective-c #iOS #core-data #uiimage
Вопрос:
Мне нужно взять несколько изображений из библиотеки фотографий iPhone / iPad из моего приложения и сохранить их в объекте Core Data и отобразить их в виде небольших миниатюр (48×48 пикселей) в UITableViewCell и около 80×80 пикселей в подробном UIView. Я следил за примером приложения Recipes, где они используются UIImageJPEGRepresentation(value, 0.1)
для преобразования в NSData и сохранения байтов внутри Core Data, и в конечном итоге это не занимает много места, что хорошо. Но при извлечении данных, использовании UIImage *uiImage = [[UIImage alloc] initWithData:value];
и отображении их в виде миниатюр с «подгонкой по размеру», они выглядят ужасно и зернисто. Я попытался изменить переменную качества изображения в сжатии JPEG, но даже установка ее на 0.9 не помогает.
Это нормально? Есть ли лучший способ сжатия изображения, который не вызывает такой большой зернистости? Поскольку я просто хочу показать небольшой эскиз, а затем эскиз чуть большего размера, я считаю, что Core Data отлично подойдет для его хранения, поскольку он должен (теоретически) также поддерживать iCloud. Но если это будет выглядеть ужасно, тогда мне придется пересмотреть.
Ответ №1:
Две вещи: вы изменяете размер изображения до нужного размера? Вы пробовали UIImagePNGRepresentation()
? Это должно сжимать его без потери качества.
Комментарии:
1. Спасибо. Я пробовал оба, но изображения выглядят ужасно при любых обстоятельствах. На iPhone это работает нормально, но на iPad выбор изображения из библиотеки огромен, и, возможно, подгонка изображения к миниатюре размером 48×48 выглядит не очень хорошо. Что бы вы порекомендовали в качестве алгоритма изменения размера UIImage? Возможно, проблема в этом. Я использую это: vocaro.com/trevor/blog/2009/10/12 /…
Ответ №2:
Если UIImagePNGRepresentation (без потерь) выдает плохие изображения, то проблема заключается в коде изменения размера изображения. Core Data просто возвращает вам то, что вы вложили, поэтому, если вы получаете плохие изображения, это потому, что вы вставили плохие изображения.
У одного из ваших iPhone / iPad сетчатка, а у другого нет? Если это так, возможно, проблема в том, что вам на самом деле не нужны изображения размером 48×48 пикселей, вам нужны изображения размером 48×48 точек (что означает, что вам потребуется 2 изображения 96×96 для отображения с качеством retina).