(Продолжение. Начало в №31)
Часть 2. Параметры формата JPEG
Конвертирование - пожалуй, одна из самых популярных операций, выполняемых над растровой графикой. По частоте использования она уступает, наверное, только просмотру слайд-шоу. Пользователи со стажем наверняка заметили, что при изменении формата графического файла не всегда достаточно лишь указать тот формат, в котором необходимо сохранить файл. В некоторых случаях не помешает установить те настройки параметров формата, которые в большей степени отвечают дальнейшим планам относительно сохраняемого изображения. Никто не будет спорить с тем, что файл, который требуется переслать по email, должен занимать как можно меньше байт, а изображение, которое необходимо обработать в редакторе, в результате сохранения не должно потерять графическую информацию. Поэтому давайте разберемся, для чего служит тот или иной параметр выбранного формата и какое сочетание значений параметров является оптимальным в типичных ситуациях.
Графический формат JPEG распространен очень широко. При сохранении изображения в JPEG размер файла уменьшается в десятки раз, что достигается удалением избыточной информации о цвете и яркости. Он лучше всего подходит для сжатия фотографий и многоцветных рисунков с множеством деталей и плавных цветовых переходов. Нужно помнить, что данный формат пригоден для конечного представления графики, а не для хранения промежуточных данных, т.к. после каждого повторного сохранения некоторая часть графической информации безвозвратно теряется. У JPEG, по сравнению с GIF и PNG, совсем немного настраиваемых параметров, однако их число может варьироваться от программы к программе.
Режимы сжатия в JPEG
Стандартом JPEG (ISO 10918-1) предусмотрено четыре режима сжатия: последовательный, иерархический, без потерь и прогрессивный. Большинство графических редакторов используют последовательный режим сжатия по умолчанию. Однако в некоторых программах он может быть включен явно. Например, в Adobe Photoshop в диалоговом окне Save As за это отвечает переключатель Baseline Standard, в Jasc Paint Shop Pro - Standard Encoding. Рассмотрим ключевые моменты последовательного алгоритма.
Описание последовательного режима
Этап 1. Монохромный рисунок (режим Grayscale) разбивается на участки 8x8 пикселов. RGB-изображение сначала переводится в режим YCrCb, а затем каждый канал (яркостный Y и цветоразностные Cr и Cb) обрабатывается как черно-белый рисунок, т.е. делится на участки 8x8 пикселов и т.д. (см. следующие этапы). Если картинку очень сильно сжать в JPEG, то можно увидеть блочную структуру - результат разбиения на участки 8x8 пикселов.
Этап 2. Значения яркости и тона каждого пиксела конкретного блока раскладываются по восьми базисным косинусным функциям, т.е. применяется прямое дискретное косинусное преобразование (Discrete-Cosine Transform, DCT), значительно облегчающее сжатие. Само DCT не приводит к потерям информации.
Этап 3. Полученная на прошлом этапе DCT-матрица квантуется с использованием одной из предложенных в стандарте JPEG таблиц квантования (для яркостного и тоновых каналов обычно используются разные таблицы). В итоге информация, усредненная по всем 64-м элементам DCT-матрицы, размешается в нескольких ячейках в левом верхнем углу, а остальные элементы обращаются в нули. Вы, наверное, заметили, что при сжатии в JPEG теряются мелкие детали. Это обстоятельство как раз и является результатом квантования. Человеческий глаз практически не воспринимает эти потери, а размер графического файла значительно уменьшается.
Этап 4. Квантованная матрица преобразуется в вектор зигзагообразными проходами, и полученная числовая последовательность кодируется методом Хаффмана или арифметическим кодированием. Код Хаффмана - код переменной длины, в котором более длинные кодовые слова назначаются редко встречаемым символам или их группам.
Параметры последовательного
режима
Самый известный и не требующий дополнительных пояснений параметр - уровень сжатия, или качество. Во всех рассматриваемых в данном цикле статей графических редакторах он называется Quality (качество) и представлен визуально в виде регулятора и шкалы от 0(10) до 100 (в окне Save As Adobe Photoshop - от 0 до 12). В зависимости от значений данного параметра может быть выбрана более подходящая таблица квантования (если в программе зашито несколько) или изменены формулы, по которым квантуется DCT-матрица. Чем меньше значение параметра Quality (чем левее расположен маркер), тем меньше качество, а значит, больше потерь, и тем меньше размер выходного файла (в Jasc Paint Shop Pro меньшему значению данного параметра соответствует более высокое качество). И наоборот. Для получения максимального качества переведите регулятор Quality в крайнее правое положение. В этом случае потери недоступны человеческому глазу, а размер файла уменьшается в 5-6 раз. Оптимальные соотношения качества картинки и размера файла для популярных графических редакторов приведены в таблице. Измерение проводилось на глаз для одного и того же многоцветного RGB-изображения.
Оптимальный уровень сжатия | ||
Программа | Оптимум | Размер, Кб |
ACDSee | 55..60 | 101 |
Adobe ImageReady | 40 | 86 |
Adobe Photoshop | 5..6 | 101 |
Corel Painter | 65 | 65 |
Jasc Paint Shop Pro | 30 | 72 |
Macromedia Fireworks | 70 | 86 |
PhotoFiltre | 75 | 97 |
Ulead PhotoImpact | 65 | 65 |
XnView | 55 | 60 |
В диалоговых окнах Save As фотоменеджеров XnView и ACDSee можно заметить флажок Optimize Huffman's Code, который позволяет улучшить код Хаффмана, применяемый на заключительной стадии сохранения файла в формат JPEG. Выбор данного параметра позволяет немного уменьшить размер выходного файла без изменения его качества. Поскольку неизвестно, какие операции скрыты за вышеназванным флажком, остается предположить, что при активации данной опции используется арифметическое кодирование или код Хаффмана применяется к большим группам результирующей последовательности, что действительно позволяет увеличить сжатие (так называемый Модифицированный код Хаффмана). В Adobe Photoshop этот параметр называется Baseline Optimized, в Adobe ImageReady - просто Optimized, в Ulead PhotoImpact - Standard Optimize. Теоретически картинки JPEG с оптимизированным кодом Хаффмана могут быть несовместимы с некоторыми редакторами, которые не имеют соответствующего алгоритма декодирования и в результате не могут распаковать файлы. Однако этого мне еще не приходилось наблюдать.
Прогрессивное сжатие
В JPEG-енкодере практически каждого графического редактора реализован прогрессивный режим работы. Флажок, отвечающий за его активацию, обычно называется Progressive, или Progressive JPEG. Прогрессивная компрессия - это последовательное сжатие, выполняемое несколько раз. Результат такой работы виден в браузере, если соединение с интернетом осуществляется по каналам с маленькой пропускной способностью. В этом случае загружаемая картинка выводится не по мере загрузки, а сразу, но в плохом качестве, занимая все отведенное под нее пространство. Впоследствии, по мере загрузки, изображение становится все более четким. В Adobe Photoshop при выборе прогрессивного режима имеется возможность указания количества проходов (от 3 до 5). В Macromedia Fireworks данный параметр называется Progressive Browser Display и выбирается в окне File -> Export Preview. Прогрессивный режим сжатия с четырьмя проходами (именно столько циклов предусмотрено для прогрессивного сжатия во всех редакторах) позволяет получить файл меньшего размера, по сравнению с последовательным режимом. Отличия, как и при использовании оптимизации кода Хаффмана, составляют несколько процентов.
Режим сжатия без потерь
Данный режим работы JPEG из всех рассмотренных программ реализован только в Jasc Paint Shop Pro (File -> Save As -> в списке Type выберите Lossless Encoding). В так называемом кодировании без потерь используется отличный от DCT алгоритм сжатия, позволяющий уменьшить размер 24-битной RGB-иллюстрации лишь в два раза. Этот вариант JPEG подходит для хранения промежуточных версий изображения, т.к. графическая информация не теряется. Однако прочитать такой файл штатными средствами не получится - ни один из используемых мною редакторов, за исключением, разумеется, Paint Shop Pro, не смог декодировать JPEG-файл, сжатый без потерь.
Остальные параметры
Кратко охарактеризуем другие параметры, которые вы можете встретить, конвертируя графические файлы в JPEG:
Размытие (Blur, Soft или Smoothing) - фильтр, позволяющий сгладить границы блоков 8x8 пикселов (Fireworks, Photoshop, Corel Painter, PhotoImpact и др.); этот эффект рационально использовать только в связке с высоким уровнем сжатия для изображений с небольшой детализацией.
Сохранение EXIF/IPTC-данных - сохранение служебной информации, прикрепленной к JPEG-файлу; если вам нужно знать, работала ли фотокамера, сделавшая данный снимок, со вспышкой, или помнить, в каком приложении было создано данное изображение, поставьте этот флажок (XnView, Paint Shop Pro);
Сохранение ICC-профиля (Preserve ICC-Profile) - включение в изображение ICC-профиля цветового пространства, в котором оно было создано, для корректного отображения в других программах, поддерживающих профили (Photoshop, ImageReady);
Субвыборка (Subsample) - оптимизация (точнее, аппроксимация) информации о цвете, приводящая к уменьшению размера файла на 10-20% (!!!) при практически неизменном качестве (Paint Shop Pro, PhotoImpact, ACDSee). Дело в том, что потери в цвете менее заметны, чем потери в яркости, поэтому каналы Cr и Cb могут сжиматься сильнее яркостного канала, а элементы их матриц - заменяться усредненными значениями.
Необходимые выводы
Формат JPEG позволяет добиться высоких коэффициентов сжатия многоцветных изображений, причем потери графической информации, произошедшие в процессе компрессии (при квантовании), практически не воспринимаются глазом человека. Для уменьшения размера файла при неизменном качестве можно применить прогрессивный режим, оптимизацию кода Хаффмана и/или один из методов аппроксимации цветовой информации. В JPEG целесообразно сохранять уже конечные версии рисунков, т.к. их многократное закрытие (сохранение) в растровых редакторах приводит к накоплению потерь графической информации, а значит, снижению качества. Формат JPEG не поддерживает индексированную цветовую палитру и прозрачность пикселов. По результатам проведенного тест-драйва, лучше всего сжимают JPEG-файлы XnView и PhotoImpact.
Виталий
КРАСИЛЬНИКОВ,
[email protected]
Горячие темы