PNG - "знакомый друга"

Есть такое понятие, как "знакомый друга". То есть, это человек, близко с которым ты не знаком и плотно не общаешься, но оба вы знаете о существовании друг друга. Примерно так же дела обстоят и в компьютерных технологиях. Очень многое есть из того, о чем мы немного слышали или имеем только общее представление. Но гораздо интереснее выглядит ситуация, когда "знакомые друга" появляются в областях хорошо известных. Например, далеко не каждый специалист, работающий с веб-дизайном либо профессиональной графикой, расскажет вам о формате PNG, хотя он создавался как продолжение GIF и как более универсальная замена профессиональному TIFF.

Так в чем причина такого слабого распространения? На самом деле в этом нет вины пользователей, сам формат несет за собой целый воз проблем, присущих даже нынешнему состоянию индустрии. Давайте разбираться вместе.


"Золотые" 80-е

События, которые имеют прямое отношение к нашему материалу, начались с 1978 года, именно тогда появился алгоритм сжатия данных LZ78, в аббревиатуре обозначения которого явно присутствуют первые буквы фамилий ученых Абрахама Лемпеля (Abraham Lempel) и Якоба Зива (Jacob Ziv). К 1984 году алгоритм был улучшен американцем Терри Велчем (Terry Welch) и получил название LZW. Нужно сказать, что компания подобралась "веселая", и, по слухам, даже выяснялся порядок следования фамилий, например, "Алгоритм Зива - Лемпеля - Велча" (тогда стандарт назывался бы ZLW). В общем, такие слухи просто так не появляются и дыма без огня не бывает. А почему мы на это обратили внимание, вы поймете чуть позже.

Середина 80-х ассоциируется и с другой компьютерной вехой, а именно - работой над цифровым представлением графических изображений. До этого было разработано и принято несколько основополагающих стандартов, но все они подразумевали некоторую избыточность и большие размеры. Необходимо было придумать нечто более емкое, чем и начало заниматься множество компаний. С одной стороны, как мы знаем из материалов "Основы цифрового видео", была создана экспертная группа JPEG, разработавшая одноименный стандарт. Причем в него сразу же заложили "потерю качества", то есть возможность деструктивных изменений. И вторая новинка того времени имеет прямое отношение к фирме CompuServe, которая подготовила свой собственный формат сжатых графических файлов GIF (Graphics Interchange Format - GIF). Изначально GIF сжатие без потерь, и в основе всего этого лежал алгоритм LZW.

 


Что же такое LZW?

"ТАИ9 - ОСТРОВ В 9ХОМ ОКЕАНЕ". Что в данном случае я сделал? Заменил слог "ТИ" на кодовое обозначение "9". В результате я сэкономил достаточно много места, особенно, если взять не одно предложение, а текст, в котором слогов "ТИ" может быть сколь угодно. В принципе, все показано на тривиальном примере, но здесь вы можете уловить саму суть LZW - составляется некая таблица, в которой определенные последовательности (фразы или строки) преобразуются в какие-либо кодовые обозначения. Естественно, эти символьные строки могут касаться не только текста, но и графики и так далее - в общем, данных различного типа.

Сжатие получается достаточно хорошим, особенно в случаях, когда мы имеем дело с данными, содержащими множество однородных структур, например, графические файлы с большими зонами, закрашенными в один цвет, и т.п. Соответственно, при кодировании все анализируется и составляется таблица, при декодировании она берется за основу, и записанные данные дешифруются. Да-да, принципы со "шпионскими штучками" очень схожи.


Начало хорошее

Как вы понимаете, GIF отличался от JPEG вообще подходом, а также задачами, которые были поставлены перед разработчиками. Причем, если говорить совсем уж прямо, то у GIF главными структурными элементами для анализа являются строки, а у того же JPEG - небольшие квадратики (блоки и макроблоки). Подходы абсолютно разные. Изначально GIF не подразумевал варианта сжатия с потерями, но потом он был реализован. Все дело в том, что небольшие отклонения в оттенках цвета можно приравнивать к ближайшим стандартным величинам. За счет этого можно дополнительно уменьшить объемы сохраняемых данных, упростить палитру, но уже деструктивно по отношению к исходному файлу. Таким образом, GIF отлично подошел как один из наиболее удачных вариантов для хранения изображений в рамках веба и стал явным конкурентом JPEG. Хотя, если вы попробуете "ужать" в lossy-GIF плавный градиент, то получите не что иное, как радугу - специфика стандарта.

Помимо этого, GIF предусматривал наличие альфа-канала в самом наипростейшем его виде. Для тех, кто не в курсе, в GIF'е можно указать "прозрачные" цвета. С одним лишь допуском: прозрачный или нет, полупрозрачного быть не может. Альфа-канал - это канал управления прозрачностью. В современном виде вы можете указывать различные варианты, но в GIF'ах такая возможность не предусмотрена.

Помимо этого, в рамках данного стандарта предусмотрена возможность одновременного хранения нескольких растровых изображений и возможность их синхронного отображения согласно временной сетке. Так родилось целое течение, широко известное и поныне - GIF-анимация.

И еще одна яркая черта формата - данные могут храниться и выводиться в чересстрочном режиме (interlaced). Причем в этом случае не стоит понимать слово "чересстрочные" буквально, потому как изображение может выводиться сначала 1, 5, 10, и т.п., между ними есть некое сглаживание, потом загружается 2, 6, 11 и т.п. А внешне это выглядит, как из чего-то мутного проявляется нечто четкое. Изначально такой вариант был предусмотрен как удобная функция для пользователя, ведь он может внешне осмотреть картинку, не загружая ее конца, и, в случае чего, остановить этот процесс.

Изначально GIF предусматривал поддержку палитры из 256 цветов и на время создания этого стандарта такой вариант был одним из самых лучших. А после не поступило никаких новых модификаций стандарта. А что произошло, собственно?


Турбулентность

Неизвестно по каким причинам CompuServe, разрабатывая GIF, даже не поинтересовалась, а есть ли какой-нибудь патент на LZW. А между тем он был (U.S. Patent 4,558,302), его зарегистрировал Терри Велч 20 июня 1983 года. Изначально он принадлежал компании Sperry Corporation, позднее перешедшей в состав Unisys Corporation.

Сам GIF был принят в 1987 году (GIF87a), а его модификация с прозрачностью и анимацией - в 1989-м (GIF89a). Кстати, стоит отметить, что примерно в эти же годы были утверждены JPEG и Motion JPEG. Появлялась интересная конкуренция. Но... не тут-то было.

В декабре 1994-го Unisys Corporation узнала (!), что в одном из самых популярных графических форматов мира используется алгоритм LZW, патент на который лежит у них самих. Последовали незамедлительные действия. В результате всех разработчиков заставили платить деньги, а для некоммерческого ПО доступ к таким технологиям стал и вовсе закрыт. Условия для разработчиков стала диктовать Unisys, а CompuServe уже никак не могла влиять на дальнейшее продвижение своего стандарта, что до этого у них проходило очень успешно - формат приобрел статус мирового.

И тут есть сразу множество тонких моментов. Например, вопрос о том, почему столько лет Unisys Corporation выжидала? Во-вторых, сам LZW, по крайней мере, в том варианте, что мне удалось прочитать, описывает нечто очевидное, такое же, как, например, способ завязывания галстука. То есть, пока вы это можете делать бесплатно, но как только кто-то напишет об этом научную статью и утвердит соответствующий патент, то всем придется за это платить. То есть, на самом деле алгоритм LZW - это некая банальность, до которой можно додуматься просто так. Наверное, поэтому CompuServe и не утрудила себя поиском патентов именно в этом направлении, но... как-то очень быстро сдалась. Unisys интересовали только деньги, а не продолжение и развитие стандарта. И они могли "стричь капусту" вплоть до 2003-2004 гг., когда их патенты на LZW потеряли свою силу.

Буквально через месяц после начала скандала, а именно 4 января 1995 года, Т. Боутелл предложил в ряде конференций Usenet создать свободный формат, который был бы не хуже GIF. Нужно отметить, что подобные свободные сообщества имеют несколько сторон, которые могут восприниматься по-разному. То есть, как альтернатива миру строгих ограничений и патентов это отличное решение. Но практически полностью отсутствует маркетинг, то есть продвижение своих решений и продуктов, у большинства разработок очень слабая скорость реализации, также иногда имеет место "вкусовщина", что мы во всем цвете и можем наблюдать в рамках сообщества, объединившегося вокруг PNG.


PNG

Изначально работа пошла очень быстро, практически за три недели был изобретен и продуман новый стандарт, который, в конце концов, назвали PNG (Portable Network Graphics, произносится как "пинг", хотя в шутку его аббревиатуру часто расшифровывают как "PNG is Not GIF"). Он был представлен на рассмотрение консорциумом W3C в декабре 1995-го, а 1 октября 1996-го уже был рекомендован как полноправный графический формат для веба.

Вместо LZW использовался другой алгоритм сжатия Deflation, реализации которого были свободно доступны в Интернете, и он является бесплатным. Стоит отметить, что принципиальной разницы между LZW и Deflation, как таковой, немного, то есть идентичен сам подход к обработке данных. В частности, Deflation вы можете встретить во множестве программ-архиваторов, в том числе и в PKZIP и GNU GZIP. Из бесплатных алгоритмов он по праву считается одним из лучших.

Но сам PNG в момент его разработки стал несколько отдаляться от идеи полноценной и бесплатной замены GIF. Было решено, что он будет иметь свое особенное место в мире графических форматов. А поскольку идей было много, то сам PNG уже разделили на две сферы - для веба и для профессиональной работы (в качестве замены TIFF). В результате получилось что-то не совсем понятное.

От того, что было в самом GIF, усовершенствовали только две конкретные вещи: практически сняли ограничение с максимального количества цветов (в GIF'е ограничение - 256), а также по-другому использовали альфа-канал, сделав характеристику прозрачности изменяемой по шкале от 0 до 255 (256 градаций). Согласитесь, это уже было более профессиональным решением. Причем наличие альфа-канала предусмотрено опционально, то есть его можно и не использовать.

Помимо этого, были внедрены гамма-коррекция (межплатформенное управление яркостью изображения) и двумерная чересстрочность (метод прогрессивной развёртки, то же, что и в GIF'ах). С точки зрения конкуренции с TIFF, основной задачей разработчиков было создание формата, который одинаково хорошо читался бы во всех (!) приложениях, поддерживающих PNG (с TIFF'ами ситуация обстоит несколько по-другому), причем тут мы говорим о компрессии данных без потерь.


Проблемы

В принципе, у данного формата сразу начались проблемы с распространением. Дело в том, что его стали поддерживать практически все браузеры, кроме... Microsoft Internet Explorer 6, а им, как известно, пользуется большое число людей. Чтобы хоть как-то исправить ситуацию, для размещения PNG-изображений специально для этого просмотрщика были написаны скрипты, но их наличие стало не очень адекватно восприниматься другими браузерами. В результате произошли задержки, да и кому вообще интересно использовать формат, который поддерживается лишь частично. Ситуация исправилась с выпуском IE 7, но время уже было потеряно.

Был и еще один серьезный момент, о котором стоит рассказать отдельно. PNG изначально не поддерживал хранение множества изображений и их воспроизведение "один-за-одним". Дело в том, что в момент создания данного формата (1995) GIF-анимация использовалась очень редко, и поэтому разработчики решили отказаться от этой функции, которая для сегодняшнего GIF является чуть ли не ключевой. Это было ошибкой, но само решение было волевым.

В том же 1995-м были и противники такого твердого отказа, они отпочковались от основной группы и занялись собственным стандартом MNG (Multiple-image Network Graphics), который вступил в силу в начале 2001 года, а готов был в 1999-м. За основу он мог брать PNG и JPEG-файлы, позволял использовать полупрозрачность и гамма-коррекцию. Был поддержан в Mozilla Firefox 3.0 и Netscape Navigator 6.0.

Помимо этого, в рамках Mozilla Corporation разрабатывался и другой стандарт APNG (Animated Portable Network Graphics), который является полностью совместимым с PNG и даже использует в своей основе файлы этого формата. Предназначен он для анимации по образу и подобию GIF-анимации. Но между тем, группа разработчиков PNG отказалась признать формат APNG как официальный буквально недавно, 20 апреля 2007 года. Как видите, войны "на ровном месте" продолжаются и поныне.


В завершение

Сейчас, в 2007-м, когда все патенты на LZW и GIF прекратили свое действие, будущее такого стандарта, как PNG, остается под вопросом. Он до сих пор остается "знакомым друга", используется достаточно редко, хотя его можно часто встретить в программах, генерирующих HTML-отчеты с изображениями, разработка которых началась до 2003 года. Ведь подобные же картины мы можем наблюдать и в звуке, например, со стандартом Ogg Vorbis, также не требующим платного лицензирования.

А проблемы у этих двух форматов практически одинаковы - слабая поддержка со стороны индустрии. Например, та же организация MPEG поставила перед собой уникальную задачу: создать не только уникальный стандарт, но и заручиться поддержкой мировых производителей. Сколько сейчас плееров поддерживают Ogg Vorbis, а сколько - mp3? Во-вторых, оба эти формата создавались как бы "в пику", то есть как замена популярным стандартам, которые, извините за тавтологию, уже были популярны.

В общем, с использованием PNG можно получить ряд плюсов, хотя данный стандарт нельзя назвать ключевым и на что-то влияющим. Более подробную информацию о стандарте вы, при желании, можете узнать на сайте: www.libpng.org.

Кристофер,
christopher@tut.by

Версия для печатиВерсия для печати

Номер: 

31 за 2007 год

Рубрика: 

Software
Заметили ошибку? Выделите ее мышкой и нажмите Ctrl+Enter!
 

Комментарии

Страницы

Аватар пользователя v-tal
IE6 не поддерживает PNG???

IE5 или даже 4 его поддерживал.

Аватар пользователя Anatol
Есть формат, который меньше занимает места, чем Tiff, прозрачность поддерживает. Вот в него я и сохраняю кадры перед долгим редактированием. Всё, что я знаю, его поддерживает. Почему же у него неудачная судьба? Вот если бы он ещё больше сжимал без потерь. Но не знаю лучшего.

С потерями многостраничный - сегодня идеал Djvu. Фактически потерь не видно.

Аватар пользователя абыфацель
2v-tal

И ие4, и ие5 работают с PNG. Только криво - некоректно отображают цвета и прозрачность. Это создаёт проблемы для дизайнеров-декораторов веб-сайтов и им приходится использовать gif для всяких там менюшек и прочей декоративной фигни. Вот только вопрос почему Кристофер представил это как кризис формата PNG? Мало ли Микрософт написала глючных программ что ли? Пора бы уже и привыкнуть.

Что же касается статьи.

Декоративная графика - это всего лишь очень узкая область графических задач. Основное применение PNG - это содержательная графика типа рисунков, чертежей, схем, сложных математических, химических и т.д формул, экспорта векторной графики и экспорта из CAD'ов. То есть то, что не относится к классу фотографий, где, например, есть тонкие линии, мелкме шрифты, и где JPG абсолютно не пригоден. (В отличие от общих рассуждений Кристофера, могу продемонстрировать это на простых паримерах) Альтернативы PNG здесь нет вообще, так как gif тут и рядом не стоит. tiff имеет аналогичную направленность, но используется в полиграфии а не в интернет.

gif - это 8-разрядный формат, а PNG - 24-разрядный. И аналогию Кристоферу следовало бы проводить не с MP3 и Ogg, а с 8-разрядным звуком и 24-разрядным.

Очень неудачная статья.

Аватар пользователя Кристофер
Господа, особенно v-tal, процитирую часть статьи:

"В принципе, у данного формата сразу начались проблемы с распространением. Дело в том, что его стали поддерживать практически все браузеры, кроме... Microsoft Internet Explorer 6, а им, как известно, пользуется большое число людей. Чтобы хоть как-то исправить ситуацию, для размещения PNG-изображений специально для этого просмотрщика были написаны скрипты, но их наличие стало не очень адекватно восприниматься другими браузерами".

То есть, со скриптами поддерживал и 4-й Explorer, только эти же скрипты плохо воспринимались другими браузерами.

Аватар пользователя SF
>>gif - это 8-разрядный формат, а PNG - 24-разрядный

наверное, Вы хотели сказать 32-разрядный (3*8 + alpha channel)?

Аватар пользователя LX
> То есть, со скриптами поддерживал и 4-й Explorer, только эти же скрипты плохо воспринимались другими браузерами.

с какими скриптами????? кристофер, вы о чем вообще?

Аватар пользователя LX
кристофер, что ж вы вопрос-то игнорируете? какими скриптами можно заставить IE работать с png?
Аватар пользователя Инкогнито
ерунду не надо писать. IE6SP2 и нормально работает с png и даже при ручном открытии можно выбрать тип с расширением png.
Аватар пользователя Инкогнито
кстати, указывать надо, какой png не полностью поддерживается - 8 или 24. Кристофер, вы знаете? гы.
Аватар пользователя LX
да кристофер, как всегда, просто чуши нанес

Страницы