Форматы графических файлов
Знание файловых форматов и их возможностей является одним из ключевых факторов в допечатной подготовке изданий, подготовке изображений для 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-й версии, поддерживается многостраничность.