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

BMP

Формат BMP (сокращение от bitmap — битовая карта, формально говоря все растровые графические форматы представляют собой битовые карты, но BMP первым застолбил такое название лично для себя) исторически один из самых простых и старинных форматов. Фактически он представляет собой сохранение изображения байт в байт, т.е. как мы представили картинку в виде таблицы значений, так и сохранили.

В этом формате может храниться как черно-белое, так и цветное изображение с глубиной цвета в 1, 4, 8, 16, 24, 32 или 48 бит на пиксель. Как результат, хоть изображение в файле максимально точно соответствует оригиналу, обычно имеет большой размер. К примеру, снимок экрана с размерами 1024 точек по горизонтали и 768 точек по вертикали, сохраненное в BMP файл с 16-ти битной глубиной цвета, будет иметь объем порядка полутора мегабайт.

Чтобы уменьшить объём дискового пространства, занимаемого файлами в данном формате, в описание формата введена поддержка упаковки данных с помощью неразрушающего алгоритма RLE (кодирование сериями), который состоит в том, что указывается цвет не одного пикселя, а нескольких одноцветных последовательно идущих и их количество. Это позволяет уменьшить размер файла без потери качества изображения. В этом случае, изображение может иметь расширение RLE. Формат активно используется фирмой «Микрософт» в технических целях, поэтому изображения могут иметь расширения, связанные не с форматом, а с их назначением.

GIF

В 1987-м году компания CompuServe (один из самых крупных операторов связи в США 80-х годов) предложила формат GIF (Graphics Interchange Format) как формат для передачи изображений через сеть. Формат поддерживает черно-белые и цветные изображения с палитрой, глубиной цвета до 8 бит на пиксель, т.е. использовать 256 цветов. Возможность сжатия данных без потерь с помощью достаточно мощного алгоритма LZW, который хорошо работает на изображениях, где имеется много ровных одноцветных областей (например чертежей или логотипов), либо много повторяющихся фрагментов.

Важной особенностью формата GIF является возможность объединения нескольких изображений в один файл, что позволяет сохранять анимированные картинки.

Формат позволяет задавать полностью прозрачные области, но не позволяет устанавливать степень прозрачности. Это вызвано тем, что он не использует стандартный метод альфа-канала (канала прозрачности), а просто использует один из цветов палитры как прозрачный.

После появления формат быстро стал популярным и долгое время был (да и остается, постепенно сдавая позиции PNG) одним из самых распространенных (вместе с JPEG) способов передачи графических файлов. Особенно часто он встречается в Интернете. Например, в качестве «аватарок» – маленьких рисунков, используемых как «подпись» пользователя.

К недостаткам формата стоит отнести поддержку только 8-мибитных изображений с палитрой, что не позволяет сохранять в нем полноцветные изображения. Другой недостаток формата: использование запатентованного алгоритма LZW (за использование требовалось делать отчисления правообладателю — корпорации Unisys) истек в 2004-м году вместе с завершением срока действия патента. Однако подобное ограничение послужило толчком к созданию формата PNG.

PNG

Чтобы избежать необходимости использовать «патентованный» формат GIF, в 1995-м году Том Боутелл предложил разработать новый «свободный» формат, который получил название PNG (Portable Network Graphics) и к концу 1996-го года получил статус RFC, а с 2003-го года стал международным стандартом ISO.

PNG поддерживает хранение изображений как с индексированной палитрой, так и изображений с глубиной цвета до 48 бит на пиксель. Изображение может быть сжато без потерь с помощью алгоритма DEFLATE.

В отличие от GIF, PNG не имеет встроенной поддержки анимированных изображений, однако она имеется в расширениях формата под названием MNG и APNG.

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

JPEG

Формат JPEG должен называться на самом деле JFIF, а JPEG (Joint Photographic Experts Group) — название организации-разработчика формата. Он был предложен в 1992-м году как формат для хранения фотографических изображений или изображений с большим количеством плавных переходов между цветами, а в 1994-м он стал международным стандартом.

Основной его особенностью является то, что в отличие от всех рассмотренных нами ранее форматов, в JPEG используется сжатие с потерями (разрушающее сжатие). Это позволяет, частично жертвуя качеством изображения, добиться высокой степени сжатия относительно оригинального изображения (уменьшить размер файла в 10–12 раз без значительного отличия от оригинала). Поэтому понятие количества бит на пиксель для JPEG несколько теряет смысл, так как применимо только к распакованному изображению, для него же чаще всего используется глубина в 8 бит на цветовой канал (или 24 бит на пиксель).

Вкратце то что происходит с JPEG файлом всякий раз как мы его сохраняем, можно описать так:

Изображение конвертируется из цветового пространства RGB в пространство YCbCr (вместо основных цветов используются Y — Яркость, Cb — отклонение от синего, Cr — отклонение от красного).

Разрешение каналов Cb и Cr уменьшается вдвое, здесь используется свойства человеческого цветового восприятия, глаз лучше различает детали яркостей, нежели цветов.

Изображение разбивается на блоки 8х8 пикселей (именно здесь и лежит причина разваливания изображения на квадратики при большой степени сжатия) и к каждому каналу применяется дискретное косинусное преобразование — данные разбиваются на спектр частот из которых они состоят.

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

Данные с каждого блока 8х8 кодируются с помощью алгоритма сжатия без потерь.

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

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

TIFF

Формат TIFF (Tagged Image File Format) стоит особняком. Это один из самых сложных из ныне живущих форматов. Он был разработан в середине 80-х годов компанией Aldus как общий формат для хранения сканированных документов и изначально поддерживал только монохромные (чёрно-белые или бинарные) изображения. По мере развития, он постепенно получил поддержку сначала изображений в градациях серого, а позже — полноцветных изображений.

Итак, что TIFF поддерживает на данный момент:

Способы хранения:

бинарные изображения;

цветные изображения с индексированной палитрой;

полноцветные изображения.

Цветовые пространства:

RGB;

CMYK;

YCbCr;

CIE Lab.

Способы сжатия:

PackBits (RLE);

LZW;

LZ77;

ZIP;

H.264;

JBIG;

JPEG (файл tiff просто включает себя изображение в формате JPEG);

JPEG-LS;

CCITT Group 3, CCITT Group 4.

Так же TIFF имеет поддержку слоев (позволяет хранить несколько изображений в одном файле), а так же добавлять некоторые элементы векторных изображения, например контуры отсечения.