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 может быть только один в файле, и все существующие просмотрщики просто читают первый, игнорируя остальные. После этого открытия я подправил код и получил на выходе правильную картинку.

Внешний вид программы iOSPngConverter

 

Так же в программе присутствует так называемый "пакетный режим" - одновременная обработка сразу нескольких файлов. Вы можете задать каталог в котором искать PNG-файлы и каталог в который складывать исправленные изображения. Так же для удобства (особенно если входящий и результирующий каталоги равны) можно задать префикс, который будет добавлен к именам выходных файлов.

"Пакетный режим" программы iOSPngConverter

 

Исходный код утилиты в скором времени так же будет доступен для всех желающих.

Changelog:
v1.1 - Fixed conversion of true "Retina" images, up to 2048*2048 pixels
v1.0 - Initial release

Скачать версию 1.1 - iOSPngConverter v1.1 (1943)
Зеркало программы - Softpedia

  9 Ответов в “iOSPngConverter”

  1. [...] Читать полностью  >>  Опубликовано iOrange в 00:28 [...]

  2. Thanks for your efforts
    But the program can not convert large image
    For example
    2048x1536
    http://megaup.ir/image/fdd.zip

  3. Great!
    please add (X) subfolders to "select source folder"
    it's really necessary if you want to multi-switch.
    thank you!

  4. 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.

  5. А как обратно конвертить из обычного PNG в понятный ios ?

 Оставить комментарий

(required)

(required)

Вы можете использовать HTML теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

© 2011 3D-Orange.com.ua
e-mail me

3D-Orange.com.ua is proudly powered by WordPress.
Suffusion theme by Sayontan Sinha