Обратное преобразование NSData в UIImage?

В приложении для iPhone я загружаю изображение в формате JPG с сервера с помощью стандартного HTTP-запроса. Данные возвращаются как NSData, которые я могу преобразовать в UIImage с помощью функции [UIImage imageWithData:responseData]. Мой вопрос: могу ли я преобразовать представление моего изображения UIImage обратно в те же NSData, из которых оно возникло? Я знаю о функции UIImageJPEGRepresentation(), но я попробовал это с качеством сжатия 1, и это дало мне нечто иное, чем исходные NSData.


person chris    schedule 27.06.2011    source источник


Ответы (2)


Я думаю (думаю, на самом деле) ваша проблема, вероятно, связана с тем, что UIImage не хранится в формате JPEG внутри. Из-за того, как работает сжатие JPEG, маловероятно, что обратное преобразование в JPEG может дать вам точно такие же данные. Есть ли причина, по которой вы не можете хранить оригинальные NSData?

person JeremyP    schedule 27.06.2011
comment
Я предполагаю, что проблема аналогична многократному открытию и сохранению JPG с помощью PhotoShop. Сжатие с потерями смешивается, и у вас никогда не будет одного и того же изображения. Причина нежелания удерживать NSData заключается в производительности с CoreData (хранении ее как BLOB). Однако я только что наткнулся на developer.apple .com / library / mac / # documentation / cocoa / conceptual /, в котором изложено решение моей проблемы. Спасибо за ваш вклад. - person chris; 28.06.2011

Вы должны использовать UIImagePNGRepresentation () и также отправлять файлы в формате PNG на устройство. PNG гораздо эффективнее загружать и сохранять на устройстве. Это стандартный метод преобразования массив байтов (NSData) в / из изображения.

Если вы застряли с данными JPEG, UIImageJPEGRepresentation () - правильный способ вернуть их в объект NSData. Он может быть не идентичным, в зависимости от того, как Apple реализовала этот метод, он может обновлять некоторые данные, технически оставаясь тем же изображением (будет отображать то же самое).

person RyanR    schedule 27.06.2011
comment
Я согласен ... но, к сожалению, мой источник на веб-сервере - это JPEG, и я хотел бы преобразовать UIImage обратно в то же представление NSData, что было изначально загружено. - person chris; 27.06.2011
comment
Я считаю, что вы правы в том, что созданный JPEG не идентичен, но в этом проблема. Меня беспокоит усугубление сжатия с потерями. Я думаю, что единственное решение - сохранить NSData, чем я сейчас занимаюсь. Спасибо за ответ. - person chris; 28.06.2011