Пишу, по большей части, про историю, свою жизнь и немного про программирование.

ICC-профили в GIF

Формат ГИФ почему-то окружён каким-то нереальным количеством мифов, хотя до недавнего времени он был очень популярен, а для анимации до сих пор остаётся единственным универсальным форматом.

Например, считается, что анимация появилась только в версии 89a (неправда, она была уже в версии 87a, в 89а её возможности были расширены), что ГИФ может использовать не более 256 цветов (не совсем так — не более 256 цветов на кадр, кадры могут накладываться друг на друга, давая любое отображаемое компьютером количество цветов).

Другое распространённое заблуждение — что ГИФ не поддерживает цветовые профили (ICC).

В самом деле, если посмотреть спецификацию формата, то слово «ICC» там не найдётся, но не найдётся там и слова «loop» (здесь: количество повторов), тем не менее, вы видели анимации, где указано определённое количество повторений и браузеры как-то это понимают.

Дело в том, что формат ГИФ поддерживает расширения. Расширения в спецификацию формата не входят.

Упомянутое количество повторов анимации задаётся в расширении, которое было когда-то предложено фирмой «Нетскейп» и потому имеет заголовок «NETSCAPE2.0», у расширения, которое содержит цветовой профиль заголовок другой — «ICCRGBG1012». ГИФ всегда разбит на блоки, и блок расширения (любого) помечен специальным флагом; заголовок расширения позволяет просмотрщику (в нашем случае — браузеру) решить с каким из расширений формата он имеет дело.

Вот начало файла ГИФ с внедрённым профилем:

00000000 47 49 46 38 39 61 01 00 01 00 f0 00 00 fe 00 02 |GIF89a..........|
00000010 00 00 00 21 f9 04 00 00 00 00 00 21 ff 0b 49 43 |...!.......!..IC|
00000020 43 52 47 42 47 31 30 31 32 ff 00 00 03 f0 55 43 |CRGBG1012.....UC|
00000030 43 4d 02 40 00 00 6d 6e 74 72 52 47 42 20 58 59 |CM.@..mntrRGB XY|

Пока не все браузеры умеют поддерживать цветовые профили ГИФ (как и профили любого другого формата), так ФФ не научился делать это до сих пор, а «Опера» научится это делать в новой версии 12.50.

Проверить поддерживает ли браузер цветовые профили можно и через Джаваскрипт. Принцип такой: я загружаю ГИФ-изображение 1×1 с цветовым профилем в тег CANVAS, потом проверяю цвет точки, он должен быть определённого цвета. Проверить поддерживает ли ваш браузер цветовой профиль четвёртой версии ГИФ можно у меня на сайте, в разделе «Храню».

7 комментариев
SiMM (mr-simm.livejournal.com) 2012

тем не менее, вы видели анимации, где строит определённое количество повторений и браузеры как-то это понимают

Стоит?

Кирилл 2012

Your browser do not support GIF ICC profile!

does not?

У меня в 21 хроме тоже пишет, что не поддерживает. Кто тогда поддерживает, если ФФ, хром и опера — нет?

Евгений Степанищев (bolknote.ru) 2012

Комментарий для mr-simm.livejournal.com:

Спасибо!

Евгений Степанищев (bolknote.ru) 2012

Комментарий для Кирилл:

does not?

Ага, глупая ошибка, не проснулся.

У меня в 21 хроме тоже пишет, что не поддерживает. Кто тогда поддерживает, если ФФ, хром и опера — нет?

«Сафари», новая «Опера», IE9, FF поддерживает версию 2 (я внедрил в GIF четвёртую версию).

masterspammer (masterspammer.livejournal.com) 2012

Интересная мысль — поддержка текстовых слоёв тоже может быть проверена через canvas.

Другое дело, что там сразу можно писать «не поддерживается» — не нашёл софта младше 10 лет, который бы это поддерживал.

Евгений Степанищев (bolknote.ru) 2012

Комментарий для masterspammer.livejournal.com:

Другое дело, что там сразу можно писать «не поддерживается»

Да, я тоже как-то искал софт, который бы это поддерживал ( http://bolknote.ru/all/2268 ), из браузеров ни один не поддерживал.

masterspammer (masterspammer.livejournal.com) 2012

Комментарий для Евгения Степанищева:

Я именно эту запись и вспоминал.