Image File Directory
Image File Directory (IFD) — это структура данных, используемая в форматах файлов изображений, основанных на спецификации TIFF (Tagged Image File Format), для хранения метаданных и указателей на сами пиксельные данные. IFD представляет собой упорядоченный список записей (тегов), каждая из которых описывает определённый атрибут изображения, такой как его размеры, цветовое пространство, метод сжатия или геопространственные координаты. IFD является ключевым элементом, обеспечивающим гибкость и расширяемость форматов TIFF, DNG (Digital Negative) и некоторых других.
История и происхождение
Концепция IFD была разработана компанией Aldus Corporation (впоследствии приобретена Adobe Systems) в середине 1980-х годов как часть спецификации TIFF, впервые опубликованной в 1986 году. Целью создания IFD было предоставление универсального и расширяемого механизма для хранения как основных, так и дополнительных данных об изображении. В отличие от более ранних форматов, которые имели фиксированные заголовки, IFD позволял добавлять новые типы информации без нарушения совместимости с существующими программами. Спецификация TIFF, а вместе с ней и структура IFD, неоднократно пересматривалась и дополнялась, последняя стабильная версия — TIFF 6.0 (1992 год). Впоследствии IFD была адаптирована для формата DNG, разработанного Adobe в 2004 году для хранения «сырых» (RAW) изображений с цифровых камер.
Структура и устройство
Общая схема
IFD представляет собой последовательность записей, каждая из которых имеет фиксированную длину 12 байт. Структура IFD начинается с 2-байтового поля, содержащего количество записей (тегов) в данном IFD (Count). За ним следуют сами записи, а в конце — 4-байтовое поле, указывающее на смещение (Offset) следующего IFD в файле (или 0, если это последний IFD). Такая организация позволяет создавать цепочки IFD для хранения нескольких изображений (например, страниц многостраничного TIFF-файла или превью и основного изображения в DNG).
Формат записи (тега)
Каждая запись IFD состоит из четырёх полей:
- Tag (2 байта) — числовой идентификатор, определяющий тип данных (например, ширина изображения, длина, производитель камеры, дата съёмки).
- Type (2 байта) — код типа данных (например, BYTE, SHORT, LONG, ASCII, RATIONAL). Определяет, как интерпретировать значение тега.
- Count (4 байта) — количество значений данного типа. Например, для тега «ImageWidth» (тип SHORT) Count обычно равен 1, а для тега «Artist» (тип ASCII) Count может быть равен длине строки.
- Value/Offset (4 байта) — либо непосредственно значение тега (если оно помещается в 4 байта), либо смещение (Offset) в файле, где хранятся данные, если их размер превышает 4 байта.
Типы данных
Спецификация TIFF определяет несколько базовых типов данных, используемых в IFD:
- BYTE (1 байт) — беззнаковое целое 8 бит.
- SHORT (2 байта) — беззнаковое целое 16 бит.
- LONG (4 байта) — беззнаковое целое 32 бита.
- ASCII (1 байт на символ) — строка в кодировке ASCII, завершающаяся нулевым байтом.
- RATIONAL (8 байт) — два значения LONG: числитель и знаменатель дроби.
- SBYTE, SSHORT, SLONG, SRATIONAL — знаковые аналоги.
- FLOAT, DOUBLE — числа с плавающей запятой.
Цепочки IFD
Поскольку поле «смещение на следующий IFD» может указывать на другой IFD, в одном файле может быть несколько IFD. Это используется для:
- Многостраничные изображения: Каждая страница (изображение) имеет свой IFD, который указывает на IFD следующей страницы.
- Превью (Thumbnails): В формате DNG часто присутствует IFD, содержащий уменьшенную копию (превью) основного изображения.
- SubIFD: Некоторые теги (например, SubIFDs) могут указывать на дополнительные IFD, которые не являются частью основной цепочки, а скорее являются вложенными структурами.
Классификация тегов
Теги в IFD можно разделить на несколько категорий по их назначению:
Основные теги (Baseline TIFF)
Обязательные для большинства TIFF-файлов, обеспечивающие базовую интерпретацию изображения:
- ImageWidth, ImageLength — ширина и высота изображения в пикселях.
- BitsPerSample — количество бит на один цветовой канал (например, 8 для 8-битного RGB).
- Compression — метод сжатия (1 — без сжатия, 5 — LZW, 7 — JPEG и т.д.).
- PhotometricInterpretation — цветовая модель (0 — WhiteIsZero, 1 — BlackIsZero, 2 — RGB, 3 — палитровая и т.д.).
- StripOffsets, StripByteCounts — указатели на расположение и размер полос (Strip) пиксельных данных.
- RowsPerStrip — количество строк в одной полосе.
Расширенные теги (Extended TIFF)
Дополнительные теги, расширяющие функциональность:
- SamplesPerPixel — количество цветовых каналов (3 для RGB, 4 для CMYK).
- PlanarConfiguration — способ хранения каналов (Chunky — последовательно, Planar — по отдельным плоскостям).
- ResolutionUnit, XResolution, YResolution — единицы и значения разрешения (DPI, DPCM).
- PageNumber — номер страницы в многостраничном документе.
Теги метаданных (Exif, XMP, IPTC)
IFD часто используется для хранения метаданных, созданных камерой или обработанных программно:
- ExifIFD — тег, указывающий на отдельный IFD, содержащий данные Exif (дата съёмки, фокусное расстояние, выдержка, ISO, модель камеры и т.д.).
- GPSInfo — тег, указывающий на IFD с геопространственными данными (широта, долгота, высота).
- InteroperabilityIFD — тег для совместимости с другими стандартами.
- XMP (Extensible Metadata Platform) — тег, содержащий метаданные в формате XML.
- IPTC (International Press Telecommunications Council) — теги для хранения новостных и авторских данных (заголовок, подпись, автор).
Теги для формата DNG
Специфические для формата Digital Negative:
- DNGVersion, DNGBackwardVersion — версия формата.
- UniqueCameraModel — модель камеры.
- ColorMatrix1, ColorMatrix2 — матрицы цветокоррекции.
- AsShotNeutral — нейтральная точка баланса белого.
- CalibrationIlluminant1, CalibrationIlluminant2 — источники света для калибровки.
Применение
Формат TIFF
IFD является фундаментальной частью TIFF. Каждый TIFF-файл содержит как минимум один IFD, описывающий изображение. Благодаря IFD, TIFF поддерживает:
- Многостраничные документы (факсы, сканы).
- Различные методы сжатия (без потерь, с потерями).
- Глубину цвета от 1 до 32 бит на канал.
- Альфа-каналы (прозрачность).
- Цветовые пространства (RGB, CMYK, Lab, YCbCr).
Формат DNG
Формат DNG, разработанный Adobe, также использует IFD для хранения как самого «сырого» изображения (RAW), так и его метаданных. В DNG IFD может содержать:
- Основное изображение (RAW) с тегами, описывающими его структуру (байеровская матрица, цветовые матрицы).
- Превью (JPEG) для быстрого просмотра.
- Метаданные камеры (Exif, GPS).
- Информацию о калибровке (ColorMatrix, Neutral).
Другие форматы
Некоторые другие форматы, основанные на TIFF, также используют IFD:
- GeoTIFF — расширение TIFF для хранения геопространственных данных (привязка к карте, проекции). Использует специальные теги в IFD.
- BigTIFF — вариант TIFF, использующий 64-битные смещения для работы с файлами размером более 4 ГБ. Структура IFD в BigTIFF модифицирована (размер полей увеличен).
- EXIF — хотя EXIF является отдельным стандартом, он часто реализуется как набор IFD внутри TIFF-файла или внутри JPEG-файла (в сегменте APP1).
Критика и ограничения
Несмотря на широкую распространённость, IFD имеет ряд недостатков:
- Сложность: Структура IFD, особенно с цепочками и вложенными IFD, может быть сложной для программной обработки по сравнению с более простыми форматами (например, PNG).
- Размер: Метаданные, хранящиеся в IFD, могут занимать значительный объём, особенно при использовании большого количества тегов (например, в DNG с несколькими цветовыми матрицами).
- Ограничения по размеру: В классическом TIFF (32-битная версия) максимальный размер файла ограничен 4 ГБ из-за использования 32-битных смещений. BigTIFF решает эту проблему, но не является общепринятым стандартом.
- Избыточность: В некоторых реализациях одни и те же данные могут дублироваться в разных IFD (например, в основном IFD и в IFD превью), что ведёт к неоправданному увеличению размера файла.
Интересные факты
- Нумерация тегов: Теги в IFD нумеруются не последовательно, а произвольно. Существуют зарегистрированные диапазоны тегов, которые могут быть использованы разработчиками для своих целей.
- Совместимость: IFD позволяет добавлять новые теги, не нарушая работу старых программ, которые просто игнорируют незнакомые теги. Это обеспечило долгую жизнь формату TIFF.
- Использование в науке: IFD широко применяется в научной визуализации (например, в микроскопии и астрономии) для хранения метаданных, таких как время экспозиции, температура, координаты.
Источники
- Спецификация TIFF 6.0 (Adobe Systems, 1992).
- Спецификация формата Digital Negative (DNG) (Adobe Systems, 2004, последняя версия).
- Стандарт EXIF 2.32 (JEITA, 2019).
- Спецификация GeoTIFF 1.0 (NASA, 1995).
- «The TIFF File Format» — статья на сайте Library of Congress (Digital Preservation).
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →