2012-03-19 2 views
8

Мне нужно иметь возможность сжимать PNG-файлы во время выполнения, но не могу найти какие-либо библиотеки, готовые iOS, которые могут это сделать. JPEG не очень подходит для меня, потому что мне нужен альфа-канал, который предоставляет PNG, а JPEG нет. Превращение PNG в что-то, что я могу использовать в рамках моего проекта iOS, вероятно, выходит за рамки моего набора навыков/знаний, когда дело доходит до C.Библиотека для сжатия PNG во время выполнения на iOS

Просто, чтобы быть экстра-ясным, мне нужно сделать это во время выполнения, время.

+0

Я думаю, это может вам помочь. http://stackoverflow.com/questions/4394491/how-to-compress-resize-image-on-iphone-os-sdk-before-uploading-to-a-server –

+0

В каком формате представлены данные до вы хотите его сохранить? И вы заботитесь о выходе из основной нити? – Tommy

+0

@Malek Спасибо, но этот пункт фокусируется на изменении размера изображения, а не на сжатии. –

ответ

3

Попробуйте ImageIO. См ImageIO Programming Guide

+0

Спасибо, что указал изображение I/O out - может быть полезно для других проектов. Для этого проекта я хочу сжать PNG-файлы, которые PNG не поддерживает как часть формата изображения. I/O, вы можете видеть, что ни один из ключей словаря PNG не обеспечивает контроль над сжатием (http://developer.apple.com/library/ios/#documentation/graphicsimaging/Reference/CGImageProperties_Reference/Reference/reference.html#//apple_ref/doc/uid/TP40005103) - если бы это было так, то UIImagePNGRпредставитель мог бы обеспечить интерфейс для него. –

+1

@RobReuss Я немного смущен этим, PNG сжаты, но есть несколько способов кодирования PNG - следовательно, pngcrush и т. д. часто могут добиться лучшего сжатия, просто потратив гораздо больше времени на взвешивание альтернатив. Так что вы хотите, это кодер, который вы можете сказать, чтобы тратить больше времени на поиск лучшего коэффициента сжатия, а не на один год Вам просто нужно доверять, чтобы использовать свое соотношение времени/эффективности по умолчанию? – Tommy

+1

Извините, если я не понял. Вы правы - PNG имеет сжатие, но iOS не предоставляет параметр, который позволяет вам контролировать степень сжатия, которая используется. То, что я ищу, - это библиотека, которую я мог бы построить в проекте, который позволил бы мне взять UIImage и создать более сжатый PNG, чем созданный UIImagePNGRпредпредвещением. Если бы был способ использовать pngcrush во время выполнения, это ответило бы на мою потребность. –

1

Если вы действительно не имеют никакого другого способа, может быть, вы можете использовать UIImagePNGRepresentation таким образом, таким образом, что это сохранить тонкий файл PNG:

// load image from the one you created 
UIImage *image = [UIImage imageNamed:@"your image name"]; 
// give it a new PNG representation from the API 
NSData *pngImage = UIImagePNGRepresentation(image); 
//save it to another place 
NSError *error = nil; 
[pngImage writeToFile:@"your path" options:NSDataWritingAtomic error:&error]; 

А потом посмотреть, если новое изображение тоньше или нет. Этот метод работает на mac: только открытие PNG-файлов и их экспорт в другой файл PNG могут уменьшить его размер.

+0

Я думаю, что вы, возможно, неправильно поняли раздел 13.2. Цель этого исключения состоит в том, чтобы оправдать отказ от приложений, где единственной целью является утечка батареи или выделение тепла - верьте или нет, люди представляют такую ​​вещь. Вы не должны стесняться использовать процессор устройства в своих сердцах, если это приведет к большому опыту пользователя - это особенно актуально на iPad, где он меньше озабочен защитой фундаментальной функции устройства (например, iPhone, нуждающийся в звонить). –

+0

Это интересная идея о сохранении PNG, хотя я серьезно сомневаюсь, что это даст мне уровень сжатия, который я ищу, так как это просто побочный эффект, но мне было любопытно, и я проверю его. –

+0

Хорошо спасибо за эту точность в этом разделе, возможно, я не поймал эту вещь, потому что я не двуязычный. По крайней мере, я не думал о том, что люди делают такие бесполезные приложения ... В любом случае я удалил эту часть ответа. Пожалуйста, расскажите нам о своем тесте. – dulgan

Смежные вопросы