Форматов, действительно подходящих для хранения изображений, не так уж и много. А если отбросить PCX и TIFF, ранее бывшие популярными, а теперь постепенно устаревающие, то их остается всего четыре: BMP, JPEG, PNG и GIF. И вполне вероятно, что скоро можно будет и GIF отнести к группе форматов, использование которых нерационально.

Сейчас самый простой (если не сказать примитивный) графический формат — BMP. Записанный в нем файл представляет собой массив данных, содержащий информацию о цвете каждого пиксела, т. е. изображение размером 1024х768 точек с глубиной цвета 24 бита будет занимать 1024х768х3= 2 359 296 байт (без учета служебной информации об объеме и имени файла, составляющей еще несколько сот байт). Даже при нынешних емкостях жестких дисков хранить коллекцию 2,5-Мбайт графических файлов крайне обременительно. Да и передача графики в формате BMP по сети (по крайней мере, без сжатия с помощью различных архиваторов) — занятие не слишком приятное. Излишне напоминать, что 10—20 лет назад возможности «железа» были намного скромнее, поэтому вопрос о разработке методов сжатия графической информации до приемлемых размеров стоял очень остро.

От LZW к GIF

Еще в далеком 1977 г. израильские математики А. Лемпел и Я. Зив разработали новый класс алгоритмов сжатия без потерь, получивший название метод Лемпела—Зива. Одновременно с самим алгоритмом, именуемым LZ77 (по первым буквам фамилий ученых и последним цифрам года создания), свет увидела статья, где излагались общие идеи данного метода. Впоследствии появилась усовершенствованная версия продукта — LZ78. Многие специалисты стремились доработать его; наибольшее распространение получил вариант LZW, написанный Т. Уэлчем, сотрудником фирмы Unisys, в 1983 г. Он отличался от своего прародителя более высоким быстродействием. В 1985 г. Unisys запатентовала LZW. Этот алгоритм универсален и может использоваться для сжатия информации любого вида. Однако успешнее всего он справляется с графическими изображениями.

Спустя десятилетие после опубликования материалов, где излагается суть метода Лемпела—Зива, но в столь же далеком от нас 1987 г. компания CompuServe разработала на основе алгоритма LZW графический формат GIF (Graphic Interchange Format), позволивший эффективно сжимать изображения с глубиной цвета до 8 бит, а по тем временам 256 оттенков считалось огромным количеством.

В 1989 г. CompuServe выпустила усовершенствованную версию формата, названную GIF89a. В нее были добавлены две замечательные функции, которые и по сей день обеспечивают формату бешеную популярность в Интернете (GIF позиционируется прежде всего как сетевой формат). Во-первых, был добавлен альфа-канал, где может храниться маска прозрачности, во-вторых, GIF стал анимированным, т. е. в один файл можно поместить несколько изображений, которые будут сменять друг друга через заданный интервал времени.

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

Думаю, область применения GIF известна всем — это изображения с резкими цветовыми переходами и бизнес-графика (логотипы, кнопки, элементы оформления и т. п.). А вот для тех картинок, где важно постепенное изменение оттенков (например, для фотографий), данный формат подходит меньше всего. Первая причина таких довольно жестких ограничений — небольшая по современным меркам максимальная глубина цвета изображения. Для фото 8 бит явно недостаточно. Вторая — не всегда корректное преобразование файлов с плавными цветовыми переливами в палитру 256 цветов и менее. Третья причина ограниченности сферы применения GIF заключается в особенностях метода сжатия информации. Данные об изображении записываются построчно. В итоге все операции происходят с массивом строк высотой в один пиксел (каждая строка обрабатывается отдельно). Следствие этого — не только крайняя неэффективность сжатия фотографий и любых других изображений, содержащих мало однотонных областей, но и зависимость его результата от расположения объектов.

Кстати, алгоритм LZW используется и в формате TIFF. Однако он по качеству сжатия значительно уступает формату GIF, хотя и поддерживает большее количество цветов в палитре.

JPEG

Форматы на основе LZW не справлялись с эффективной обработкой фотографий, и потому появилась идея сжатия с потерей качества. Суть его заключается в том, что часть малозаметных для глаза деталей изображения опускается, а восстановленный после сжатия цифровой массив не полностью соответствует оригиналу. Таким образом, можно добиться довольно большой степени сжатия данных — в 10—20 раз вместо двукратного, производимого без потерь.

Шедевр под названием «Куча мусора» и его фрагмент

В 1991 г. группа Joint Photographic Experts Group, опирающаяся на более чем полувековой опыт исследований в области человеческого зрения, представила первую спецификацию формата JPEG. Через три года она была признана индустриальным стандартом кодирования неподвижных изображений, зарегистрированным как ISO/IEC 10918-1. Впоследствии JPEG лег в основу стандарта сжатия видео MPEG.

Процесс обработки графической информации алгоритмом JPEG очень напоминает сжатие звуковых данных в формате МР3 (см. «Мир ПК», №4/03, с. 148).

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

2. Переход к более подходящему для сжатия способу представления цветов. Привычная модель RGB переводится в YCbCr, где Y — сигнал яркости, а Cb и Cr — насыщенность синего и красного соответственно. Такой способ представления цветов будет предпочтительнее и с точки зрения восприятия изображения человеческим глазом. Как известно, зрительная информация воспринимается с помощью сенсоров двух типов: палочек и колбочек. Первые анализируют яркостную составляющую изображения, вторые — цвет. Палочек в 20 раз больше, чем колбочек, и, следовательно, глаз более восприимчив к изменению яркости, чем цвета.

Если учесть описанную особенность человеческого зрения, то из матриц значений насыщенности синего и красного следует отбрасывать все четные строки и столбцы. Таким образом теряется 75% информации о распределении цветов. Матрица отчетов о яркости не изменяется, а делится на четыре части, образуя блоки 8х8.

3. Выполняется дискретное косинусное преобразование (Discrete Cosine Transform, DCT), предложенное В. Ченом в 1981 г. Оно сходно с преобразованием Фурье, только у DCT несколько ниже вероятность возникновения ошибки. Применение этого чисто математического приема объясняется тем, что в реальных изображениях соседние блоки достаточно похожи (коэффициент корреляции — 0,9—0,98). DCT преобразует информацию о цвете и яркости каждого пиксела в информацию о скорости изменения этих величин. Это преобразование является обратимым, и, значит, по новой матрице может быть восстановлена исходная с точностью до погрешности данного метода. DCT позволяет значительно сократить объем данных и размер получаемого файла.

В результате DCT графическое изображение описывается двухмерной функцией, показывающей скорости изменения яркости и цвета. Причем для большинства фотографий характерны плавные, мягкие переходы этих параметров на соседних участках. Как выявили исследования, для корректного восприятия таких изображений глазу важнее низкочастотные компоненты матрицы DCT (плавные переходы), а высокочастотные (резкая смена оттенков и яркости) уже не столь существенны. Поэтому последние кодируются с меньшей детальностью, а при превышении определенной пороговой величины, зависящей от выбранного качества сжатия, вообще принимаются равными нулю. Следовательно, при кодировании файлов с низким качеством резкие цветовые переходы смазываются, а изображение становится несколько мозаичным.

4. Кодирование полученных величин методом Хаффмана — последний этап. Оно заключается в присваивании часто повторяющимся элементам обрабатываемой информации самых коротких кодовых последовательностей, а редко встречающимся — более длинных. Вследствие этого размер получаемого файла несколько уменьшается.

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

PNG

PNG (Portable Network Graphics) обязан своим появлением на свет формату GIF, а точнее, его коммерческому статусу. Дело в том, что GIF основан на запатентованном алгоритме LZW, принадлежащем фирме Unisys, которая в первые годы существования GIF не предъявляла никаких претензий фирме CompuServe, разработавшей этот формат. Но стремительное развитие Интернета в 1993—1994 гг. внесло свои коррективы во взаимоотношения компаний. И из корыстных целей Unisys инициировала судебный процесс против CompuServe. Решение суда обязывало разработчиков ПО, в котором используется формат GIF, платить фирме Unisys лицензионные отчисления. Таким образом, GIF стал платным.

По традиции любому коммерческому программному продукту рано или поздно будет предложена бесплатная альтернатива. Примерами в данном случае могут служить операционные системы Windows и Linux или форматы сжатия звука МР3 и OGG, причем этот список можно продолжать довольно долго. GIF также не суждено было удержать статус безальтернативного формата. Днем рождения PNG можно считать 4 января 1995 г., когда Т. Боутелл предложил в ряде конференций Usenet создать свободный формат, который был бы не хуже GIF. И уже через три недели после публикации идеи были разработаны четыре версии нового формата. Вначале он имел название PBF (Portable Bitmap Format), а нынешнее имя получил 23 января 1995 г. Уже в декабре того же года спецификация PNG версии 0.92 была рассмотрена консорциумом W3C, а с выходом 1 октября 1996 г. версии 1.0 PNG был рекомендован в качестве полноправного сетевого формата.

К моменту создания PNG глубина цвета 8 бит, предоставляемая GIF, перестала удовлетворять современным требованиям. Среди предложений довести глубину цвета до 24, 48 и даже до 64 бит был выбран первый вариант. Как показало время, данное решение оказалось рациональным и отвечающим современным запросам. В заголовке файла формата PNG хранится описание всей палитры. Подстроившись таким образом под реальное количество цветов, можно получить достаточно компактный файл на выходе.

Формат PNG имеет массу достоинств, выгодно отличающих его от конкурентов. Самое главное из них — предварительная фильтрация обрабатываемых данных, поскольку большинство алгоритмов сжатия рассчитаны на одну вполне определенную модель информации. Например, формат JPEG «заточен» для изображений с плавными цветовыми переходами, а GIF — с большим количеством однотонных областей. И чем больше структура картинки отличается от эталона, тем ниже эффективность сжатия. Порой изменение всего нескольких бит приводит к тому, что алгоритм начинает работать очень хорошо или, наоборот, очень плохо. Тем временем формат PNG стабильнее воспринимает такие трансформации, и высокий коэффициент сжатия достигается практически для любого рода изображений путем преобразования информации в вид, наиболее приемлемый для обработки.

Формат PNG очень удобен для создания элементов оформления веб-страниц благодаря наличию более совершенного альфа-канала, чем у GIF. Число его уровней доведено до 254 (в большинстве форматов альфа-канал ограничивается всего двумя слоями), а прозрачность каждого из них может варьировать от 0 до 100%. Таким образом, PNG предоставляет веб-дизайнерам очень мощное и удобное средство для построения сложных многослойных изображений. Единственный тип рисунков, где PNG не может потеснить GIF на веб-страницах, — небольшие кнопки и «смайлики» размером до 700—800 байт в формате GIF. За счет служебной информации и описания палитры такие файлы в формате PNG занимают на 10—30% больше места, да и анимированные картинки этот формат не поддерживает. Кстати, статичные «смайлики» чаще используются на страницах журналов, нежели во Всемирной паутине .

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

Во-вторых, нельзя не отметить встроенную в формат гамма-коррекцию. При переносе графического файла с одного компьютера на другой изображение может выглядеть светлее или темнее, чем в оригинале. Ситуация обостряется тогда, когда на компьютерах установлены различные ОС (MS Windows и Linux) или когда машины построены на базе разных платформ (например, PC и Macintosh). Соотношение между цифровой информацией и реально наблюдаемыми на мониторе цветами называется гаммой. Встроенная в формат PNG гамма-коррекция работает следующим образом: данные о настройках дисплея, видеоплаты и ПО (информация о гамме) записываются в файл, при переносе которого на другой компьютер вид PNG-изображения не изменится.

Рисунок, состоящий из горизонтальных полос (а), занимает в формате GIF почти в 4 раза меньше места, чем то же изображение, повернутое на 90? (б)

Очная ставка форматов

На первый взгляд, у всех описанных форматов сходное предназначение: добиться уменьшения размера графического файла до разумных пределов, чтобы его было удобно хранить на жестком диске и передавать через сеть. Но алгоритмы сжатия у каждого из них настолько различаются, что и сферы использования GIF, JPEG и PNG оказались разными. И чтобы выяснить оптимальные области применения этих форматов, был проведен анализ с участием достаточно большого количества тестовых изображений (см. таблицу).

Фотографические изображения. Как оказалось, найти где-либо картинку фотографического качества — задача не из легких даже для владельцев цифровой фотокамеры, поскольку она сохраняет снимки в формате JPEG, да и конвертировать JPEG в GIF или PNG было бы не совсем корректно. Но удалось решить ее довольно элегантным способом: в сканер была навалена куча мусора и преобразована в цифровую форму. Получившийся «шедевр» размером 2530х3490 точек с глубиной цвета 24 бита, занимающий 25,2 Мбайт, сжимался в форматах JPEG и PNG (вследствие неспособности сохранять изображения с палитрой, включающей более 256 цветов, GIF задействован не был).

Как и следовало ожидать, в данном случае формат JPEG с подобранным экспериментальным путем качеством в 70% намного опередил конкурентов. При минимальной потере качества сжатие более чем в 25 раз достойно похвалы. Причем отличия между оригиналом и сжатым файлом можно заменить, только если сильно увеличить изображение. PNG справился с задачей намного хуже. Последним пришел к финишу универсальный алгоритм сжатия информации, реализованный в программе WinRAR 3.20, который был включен в тест из любопытства.

Снимок с экрана

Наиболее интересные результаты дало сжатие изображения, переведенного в палитру 256 цветов (8,42 Мбайт в формате BMP), благодаря чему в состязании смог участвовать GIF. И на этот раз в лидеры вышел JPEG, но, вопреки предположениям, размер файла получился несколько большим, чем при сжатии той же картинки, но с глубиной цвета 24 бита. Вероятно, увеличение размера файла вызвано огрублением цветовых переходов при переводе в палитру 8 бит. Среди форматов GIF и PNG последний оказался явным фаворитом, однако сжатие изображения архиватором дало просто поразительный результат: RAR-алгоритм превзошел по степени сжатия форматы, специально предназначенные для обработки изображений.

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

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

Электрическая схема. Это изображение с малым количеством цветов, содержащее преимущественно однотонные области и резкие цветовые переходы. Казалось бы, здесь формат GIF должен камня на камне не оставить от конкурентов. Но и тут ситуация сложилась не в пользу детища CompuServe. Явным аутсайдером стал JPEG. Даже при 100%-ном качестве (204 Кбайт) в глаза бросается некоторое осветление закрашенных областей (серого и желтого). При установке же 6%-го качества, когда размер рисунка сопоставим с объемами файлов в форматах PNG и GIF, изображение сильно «поплыло». А вот тот факт, что PNG-файл занимает на 20% меньше места, чем аналогичная картинка в формате GIF, заставляет задуматься об эффективности последнего. И опять здесь удивил WinRAR, сжавший схему почти в 2 раза лучше все того же GIF.

«Полосатые» рисунки. Весьма показательный пример, выявляющий главный недостаток LZW-алгоритма, примененного в формате GIF. Рисунок, состоящий из горизонтальных полос, занимает в формате GIF почти в 4 раза меньше места, чем то же изображение, повернутое на 90o. Предварительная фильтрация информации, реализованная в PNG, сделала этот формат свободным от данного недостатка. Помимо большей степени сжатия по сравнению с GIF различие в размере «полосатых» файлов составило всего 10%. Но самыми компактными снова оказались BMP-файлы, упакованные архиватором. А разница в 2 (!) байта между изображениями с горизонтальными и вертикальными полосами просто поражает.

Снимок с экрана. В нем присутствовали достаточно сложные многоцветные элементы и все 256 цветов палитры. Результат: изображение в формате PNG на 40% меньше GIF-файла.

«Смай-лик»

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

Приговор

С одной стороны, результаты сравнительного анализа основных графических форматов оказались достаточно предсказуемыми. В области хранения фотоизображений явным лидером, если не сказать монополистом, стал формат JPEG. Он обеспечивает отличное качество картинки при малых размерах файла. Для других целей этот формат совершенно непригоден. С другой стороны, еще до начала работы над этой статьей я и не думал, что мне придется расписываться в полной несостоятельности GIF. При всей своей популярности алгоритм сжатия этого формата абсолютно устарел. Более молодой PNG превосходит GIF и по качеству сжатия практически всех изображений. Убогая на нынешний день глубина цвета 8 бит не позволяет хранить в GIF фотографии (некорректную цветопередачу я уже отмечал — GIF немного «шалит» с палитрой, портя картинку). Формат PNG годится, например, для промежуточных версий подлежащих редактированию фотоизображений, когда BMP-файлы занимают слишком много места, а каждое последующее сохранение в JPEG приводит к потере качества.

Бороздя просторы глобальной сети, я заметил, что для нефотографических изображений GIF используется в 95% случаев (в оставшихся 5% применяется PNG). А ведь GIF — единственный платный графический формат, к тому же сильно уступающий по возможностям своему бесплатному конкуренту. Ничем, кроме силы привычки и лени веб-дизайнеров, я данный факт объяснить не могу. Между тем формат PNG наряду с лучшим алгоритмом сжатия может похвастаться многоуровневым альфа-каналом и гамма-коррекцией. Впрочем, популярность PNG растет с каждым днем. Очевидно, что GIF способен удерживаться на плаву за счет одной своей особенности: в нем позволительно создавать анимированные изображения. Хотя кто знает, может быть, анимированная версия PNG появится уже завтра, а GIF навсегда уйдет в историю.

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