iOSPngConverter
Периодически передо мною вставала задача просмотреть или пере-сохранить PNG-файлы содержащиеся внутри iPhone-приложения. Как Вам скорее всего известно, данные файлы в большинстве своем не могут быть открыты стандартными просмотрщиками изображений. Причина сему проста - при сборке приложений включен флаг дополнительной оптимизации PNG-изображений, при котором PNG-файл становится нечитаем, но прекрасно открывается самим iPhone.
Немного полазив по интернету я нашел парочку существующих утилит и небольшое описание того, что же делает Xcode с PNG файлами, почитать можно здесь.
Вкратце:
- Добавлен специальный чанк 'CgBI' содержащий 4 байта одному Эпплу известной информации.
- Данные изображения сжаты без маркеров zlib.
- Каналы идут в обратном порядке (RGBA -> BGRA)
- Цветовые каналы предмножены на альфу (color' = color * alpha / 255)
Так гласит iphonedevwiki, то же можно увидеть и в коде немногочисленных утилит. Однако, как оказалось, эта информация не совсем точна. Я заметил что все существующие утилиты неплохо справляются на мелких изображениях, а вот изображения покрупнее конвертируют неверно. Да и функциональность и юзабилити у этих утилит очень плохие. И решил я тогда написать свою утилитку для конвертации iPhone-PNG в нормальные PNG-изображения.
Сделал все по документации, подсматривая в код существующей утилиты - и получилось у меня то же что и у них - неправильная конвертация больших изображений. Немного покопавшись я обнаружил причину - Apple мало того что жмет данные картинки так называемым RAW Deflate сжатием (без zlib маркеров), так еще и разбивает полученный сжатый поток на несколько, при превышении определенного размера, и помещает их в разные чанки IDAT. А по стандарту PNG чанк IDAT может быть только один в файле, и все существующие просмотрщики просто читают первый, игнорируя остальные. После этого открытия я подправил код и получил на выходе правильную картинку.
Так же в программе присутствует так называемый "пакетный режим" - одновременная обработка сразу нескольких файлов. Вы можете задать каталог в котором искать PNG-файлы и каталог в который складывать исправленные изображения. Так же для удобства (особенно если входящий и результирующий каталоги равны) можно задать префикс, который будет добавлен к именам выходных файлов.
Исходный код утилиты в скором времени так же будет доступен для всех желающих.
Changelog:
v1.1 - Fixed conversion of true "Retina" images, up to 2048*2048 pixels
v1.0 - Initial release
Скачать версию 1.1 - iOSPngConverter v1.1 (1949)
Зеркало программы - Softpedia
[...] Читать полностью >> Опубликовано iOrange в 00:28 [...]
Thanks for your efforts
But the program can not convert large image
For example
2048x1536
http://megaup.ir/image/fdd.zip
Thanks for your feedback, fixed in version 1.1
Thank you for this work
Great!
please add (X) subfolders to "select source folder"
it's really necessary if you want to multi-switch.
thank you!
Thank you for the feedback, this option will be added in the next version.
Hello dear friend
Is there a way to convert photos jpg ibook?
Do you have a program to convert images?
For example, the images
http://uploadtak.com/images/p6446_ibook_jpg.zip
Hi!
It seems that these JPGs are from DRM-ed iBook. You need to remove DRM from this book to be able to open JPGs from it.
You could try Requiem DRM removal.
А как обратно конвертить из обычного PNG в понятный ios ?