Сегодня: Четверг, 25.04.2024, 11:51 (МСК)| Здравствуйте, Гость| Мой профиль | Регистрация | Вход | RSS

Популярно об ИИ.
Третий сезон

Визуальная среда Flowstone

Роботы и экзоскелеты

Google Chrome. Таким должен быть браузер

Плагины Sonnox Oxford
Главная » WEB

PNG — "знакомый друга", или история становления формата

01.06.2011


Буквально пять лет назад 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-анимация.

И еще одна яркая черта формата — данные могут храниться и выводиться в чересстрочном режиме (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 были написаны скрипты, но их наличие стало не очень адекватно восприниматься другими браузерами:). В результате произошли задержки, да и кому вообще интересно использовать формат, который поддерживается лишь частично. Ситуация исправилась с выпуском 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 года, и с того времени ситуация не поменялась. Вместе с тем к 2008 году поддержка APNG уже была реализована в тестовых сборках некоторых браузеров, и на данный момент APNG могут полноценно воспринимать Opera (версия 9.5 и выше), Opera Mobile и Mozilla Firefox (3.0 и выше, а также другое ПО на Gecko). 

В итоге

Во время, когда все патенты на LZW и GIF прекратили свое действие, будущее такого стандарта, как PNG, все еще было довольно спорным, но улучшенная характеристика количества передаваемых цветов по сравнению с GIF, а также канал прозрачности, которого нет у JPEG, сделали свое дело, и теперь PNG входит в тройку стандартных форматов статичной веб-графики. А качественную анимационную часть веба уже монополизировал флэш.




Перепечатка материалов или их фрагментов возможна только с согласия автора.



   




Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Ассоциация боевых роботов
Рекомендуем...
Новости

Разделы

Опросы

Какой язык программирования вы считаете наиболее актуальным сегодня?
Всего ответов: 329

Друзья

3D-кино






Найти на сайте:








Об авторе       Контакты      Вопрос-ответ        Хостинг от uCoz