воскресенье, 11 декабря 2011 г.

Парсинг JNG изображений

Вы наверно помните, что Mozilla убрала поддержку MNG и JNG из Firefox еще в 2003 г. Чтобы увидеть их (только через тег embed) нужен плагин. Из-за того, что поддержки JNG нигде нету, нельзя встретить JPEG с альфа-каналом. А ведь как было бы здорово…

Но я расскажу как восстановить JNG изображения на своей странице.



Начнем


Перед началом нам нужны такие функции, как загрузка бинарного кода, crc32 и желательно deferred. Все эти немаловажные функции можно взять с apng-canvas. Но я их несколько улучшил, убрал все лишнее, добавил несколько функций, например CReader. Заранее приготовил все необходимые инструменты.

Сигнатура


Сигнатура JNG несколько отличается от сигнатуры PNG двумя первыми байтами. Сигнатура — это важная часть JNG, именно от него зависит, парсить JNG или нет.

Чанки


JNG, как и PNG, устроен из чанков, но отличается тем, что хранит JPEG изображение, и альфа-канал в виде PNG данных или в том же JPEG.

JHDR

Все что вам нужно знать, так это спецификацию JNG. Прочитать ее можете здесь. Нам нужны байты ширины и высоты, а также байты, связанные с альфа-каналом.

JDAT

Нам достаточно собрать все части из JDAT и мы сможем получить JPEG изображение.

IDAT

Это чанк альфа-канала, но он нам доставляет больше проблем. Вы знаете, что PNG состоит как минимум из IHDR, IDAT и IEND. Причем IHDR мы должны сами построить, необходимые байты придется брать из JHDR. Цветовой тип всегда будет равняться нулю у JNG альфа-канала.

JDAA

Этот чанк встречается крайне редко, но с ним нужно поступать также как с JDAT, но определять надо как альфа-канал.

IEND

Не нужно ничего объяснять, это конечный чанк у JNG.

Я ничего не понимаю, а можно скрипт?


Перейдите на страницу jnglike.site40.net/ и там вы увидите ссылку на скачивание скрипта.

Комментариев нет:

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