iOS: хранение уменьшенных изображений в Core Data

#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).