Форматы графических файлов

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

Все графические данные в компьютере можно разделить на две большие ветви: растровую и векторную. Векторы представляют собой математическое описание объектов относительно точки начала координат. Большинство векторных форматов могут так же содержать внедренные в файл растровые объекты или ссылку на растровый файл (технология OPI[4]). Сложность при передаче данных из одного векторного формата в другой заключается в использовании программами различных алгоритмов, разной математики при построении векторных и описании растровых объектов.

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

Растровые форматы, предназначенные исключительно для вывода на экран имеют только экранное разрешение, то есть один пиксель в файле соответствует одному экранному пикселю. На печать они выводятся так же с экранным разрешением.

Растровые файлы, предназначенные для допечатной подготовки изданий имеют, подобно большинству векторных форматов, параметр Print Size - печатный размер. С ним связано понятие печатного разрешения, которое представляет из себя соотношение количества пикселей на один квадратный дюйм страницы (ppi, pixels per inch или dpi - dots per inch). Печатное разрешение может быть от 130 dpi (для газеты) до 300 (высококачественная печать).

Растровые форматы, так же отличаются друг от друга способностью нести дополнительную информацию: различные цветовые модели, вектора, альфа-каналы, слои различных типов, Interlaced, анимация, возможности сжатия и т.п.

BMP (Windows Device Independent Bitmap). Формат ВМР является родным форматом Windows, он поддерживается всеми графическими редакторами, работающими под ее управлением.

Применяется для хранения растровых изображений, предназначенных для использования в Windows. Способен хранить как индексированный (до 256 цветов), так и RGB-цвет (16 млн. оттенков).

Таблица 2.1.

Структура ВМР файла

BITMAPFILEHEADER bmfh; (14 байт) Заголовок файла растровой графики
BITMAPINFOHEADER bmih; (40 байт) Информационный заголовок растрового массива
RGBQUAD aColors[]; (от 8 до 1024 байт) Таблица цветов
BYTE aBitmapBits[]; (переменная) Собственно данные растрового массива

Первым элементом любого BMP-файла является заголовок BITMAPFILEHEADER.

typedef struct tagBITMAPFILEHEADER

{

UINT bfType;

DWORD bfSize;

UINT bfReserved1;

UINT bfReserved2;

DWORD bfOffBits;

} BITMAPFILEHEADER;

• bfType - должен содержать два ASCII-символа: «B» и «M», означающие bitmap. Соответствующие шестнадцатеричные значения равны 0x42 и 0x4D. При других значениях этого поля файл не является растровым изображением, принятым в Windows.

• bfSize - равен размеру файла в байтах. Используется для проверки целостности файла и для распределения памяти под весь файл.

• bfReserved1 и bfReserved2 - не документировано и не используется, должно быть равно 0.

• bfOffBits - специфицирует байтовое смещение до начала растрового изображения. Используется для определения местонахождения массива aBitmapBits в файле.

Следующей частью BMP-файла является структура BITMAPINFOHEADER, которая полностью описывает растровое изображение.

typedef struct tagBITMAPINFOHEADER

{

DWORD biSize;

LONG biWidth;

LONG biHeight;

WORD biPlanes;

WORD biBitCount;

DWORD biCompression;

DWORD biSizeImage;

LONG biXPelsPerMeter;

LONG biYPelsPerMeter;

DWORD biClrUsed;

DWORD biClrImportant;

} BITMAPINFOHEADER;

• biSize - специфицирует собственный размер структуры в байтах. Должен быть равен 40 (28 в шестнадцатеричной системе).

• biWidth и biHeight - содержат ширину и высоту изображения в пикселях соответственно.

• biPlanes - должен быть равен единице, так как BMP-файлы содержат только одну цветовую плоскость.

• biBitCount - содержит число битов на пиксель. Кроме того, отличает монохромное изображение от цветного. Должно быть равно 1, 4, 8 или 24.

1 - помечает изображение как монохромное. Показывает, что массив aColors содержит два элемента типа RGBQUAD. Каждый бит изображения, хранимый в массиве aBitmapBits, служит индексом массива aColors. Бит, равный 0, окрашен в соответствии с содержимым bmiColors[0], единичный бит – в соответствии с содержимым bmiColors[1].

4 - показывает, что массив aColors содержит до 14 цветовых значений типа RGBQUAD. В этом формате каждый байт содержит два четырехбитовых пикселя, а каждый пиксель есть индекс массива aColors, определяющего цвет.

8 - показывает, что массив aColors содержит до 256 цветовых значений типа RGBQUAD. Каждый байт в массиве aBitmapBits представляет собой отдельный пиксель, являющийся индексом массива.

24 - этот формат может описывать изображение с более чем 16-ю миллионами цветовых оттенков. Иногда называемые полноцветными (true color), эти изображения обычно используются для представления фотографий. В данном формате массив aColors отсутствует. Вместо этого 24-разрядные значения массива aBitmapBits представляют каждый пиксель как красно-зелено-синюю триаду (тип RGBTRIPLE). BMP-файл этого типа может занимать огромное пространство на диске и в памяти.

• biCompression - показывает, хранится ли данное изображение в сжатом виде, а также метод его упаковки. Равен BI_RGB (изображение не сжато), BI_RLE8 (8-разрядное групповое кодирование) или BI_RLE4 (4-разрядное групповое кодирование).

• biSizeImage - содержит размер растрового изображения в байтах.

• biXPelsPerMeter, biYPelsPerMeter - указывают предпочтительное разрешение в пикселях на метр по горизонтали и вертикали соответственно.

• biClrUsed – обычно содержит число цветов, используемое в растровом изображении и определяемое массивом aColors типа RGBQUAD. Если biClrUsed равен 0, в изображении используется максимальное количество цветов, возможное для изображения данного типа.

• biClrImportant – содержит число важных цветов изображения. Например, если это значение равно 3, первые три значения цвета в массиве aColors должны отображаться на экране с как можно более точным соответствием. Другие пиксели могут отображаться с измененным цветом или безболезненно пропускаться. Если biClrImportant равен 0, все цвета считаются важными.

В BMP-файле элемент aBitmapBits содержит массив структур типа RGBQUAD.

typedef struct tagRGBQUAD

{

BYTE rgbBlue;

BYTE rgbGreen;

BYTE rgbRed;

BYTE rgbReserved;

} RGBQUAD;

• rgbBlue – содержит относительную интенсивность синего цвета от 0 до 255.

• rgbGreen – содержит относительную интенсивность зеленого цвета от 0 до 255.

• rgbRed – содержит относительную интенсивность красного цвета от 0 до 255.

• rgbReserved – не используется. Предполагается равным 0, хотя, его физическое значение не важно.

Массив aBitmapBits содержит пиксели, которые различаются по формату в зависимости от типа растрового изображения. Байты хранятся строками слева направо, а каждая строка представляет собой линию развертки (scan line), которая может быть дополнена до 32-разрядной границы. Линии развертки упорядочены снизу вверх, то есть первый элемент массива содержит пиксели последней строки изображения. В растровых изображениях с 24-разрядным представлением цвета, где массив aColors отсутствует, байты aBitmapBits непосредственно представляют 24-разрядные триадные цвета пикселей.

WMF (Windows Metafile). Еще один родной формат Windows. Служит для передачи векторов через буфер обмена (Clipboard). Понимается практически всеми программами Windows, так или иначе связанными с векторной графикой.

Пользоваться форматом WMF стоит только в крайних случаях для передачи "голых" векторов. WMF искажает цвет, не может сохранять ряд параметров, которые могут быть присвоены объектам в различных векторных редакторах.

GIF (CompuServe Graphics Interchange Format). Разработан для передачи растровых изображений по сетям.

Он использует LZW-компрессию, что позволяет хорошо сжимать файлы, в которых много однородных заливок (логотипы, надписи, схемы).

GIF-формат позволяет записывать изображение "через строчку" (Interlaced), благодаря чему, имея только часть файла, можно увидеть изображение целиком, но с меньшим разрешением. Кроме того, файл GIF может содержать не одну, а несколько растровых картинок, которые браузеры могут подгружать одну за другой с указанной в файле частотой. Это называется GIF-анимация. Основное ограничение формата GIF состоит в том, что цветное изображение может быть записано только в режиме 256 цветов.

PNG (Portable Network Graphics). PNG - формат для Сети, призванный заменить собой GIF.

Использует сжатие без потерь. Глубина цвета может быть любой, вплоть до 48 бит (RGB, для сравнения, - 24), используется Interlacing, причем не только строк, но и столбцов, поддерживается плавно переходящая прозрачность.

В файл формата PNG записывается информация о гамма-коррекции. Это число, считанное из файла, позволяет ввести поправку яркости при отображении. Эта особенность помогает реализации основной идеи WWW - одинакового отображения информации независимо от аппаратуры пользователя. PNG поддерживается в Microsoft Internet Explorer начиная с версии 4 для Windows и с версии 4.5 на Макинтош.

JPEG (Joint Photographic Experts Group). Строго говоря, JPEG - не формат, а алгоритм сжатия, основанный не на поиске одинаковых элементов, а на разнице между пикселями. JPEG ищет плавные цветовые переходы. Лишнюю, цветовую информацию он отбрасывает, усредняя некоторые значения. Вместо действительных значений JPEG хранит скорость изменения от пикселя к пикселю.

Можно задать уровень компрессии. Чем выше уровень компрессии, тем больше данных отбрасывается и тем ниже качество. Используя JPEG, можно получить файл в 10-500 раз меньше, чем ВМР.

Формат аппаратно независим. В JPEG следует сохранять только конечный вариант работы, потому что каждое пересохранение приводит к новым потерям (отбрасыванию) данных.

TIFF (Tagged Image File Format). Аппаратно независимый формат TIFF на сегодняшний день является одним из самых распространенных и надежных, его поддерживают практически все программы на РС и Macintosh так или иначе связанные с графикой. Ему доступен весь диапазон цветовых моделей от монохромной до RGB, CMYK и дополнительных цветов Pantone.

TIFF может сохранять векторы Photoshop и массу других дополнительных данных.

Ряд программ (например, QuarkXPress 3.x и Adobe Streamline) не умеют читать такие файлы, кроме того, они могут дольше выводиться на принтеры и фотонаборные автоматы.

PSD (Adobe Photoshop Document). PSD - родной формат растрового редактора Photoshop. Он позволяет записывать изображение со многими слоями, их масками, дополнительными каналами, контурами и другой информацией - все, что может сделать Photoshop.

Однослойный Photoshop Document понимают ряд программ, многослойные - могут импортировать Illustrator и InDesidn. Fractal Design Painter и Corel PHOTO-PAINT открывают на редакцию многослойные документы Photoshop, причем лишь PHOTO-PAINT 8 открывает файл Photoshop 100-процентно корректно.

CDR (CorelDraw Document). Формат известен в прошлом низкой устойчивостью и плохой совместимостью файлов, тем не менее, пользоваться CorelDraw чрезвычайно удобно, он имеет неоспоримое лидерство на платформе РС.

Многие программы на РС (FreeHand, Illustrator, PageMaker, ...) могут импортировать файлы CDR. 7-ю и 8-ю версии CorelDraw можно без натяжек назвать профессиональными. В файлах этих версий применяется компрессия для векторов и растра отдельно, могут внедряться шрифты, файлы CDR имеют огромное рабочее поле 45х45 метров (этот параметр важен для наружной рекламы); начиная с 4-й версии, поддерживается многостраничность.

Наши рекомендации