Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
TIFF спецификация полная.docx
Скачиваний:
3
Добавлен:
26.08.2019
Размер:
264.91 Кб
Скачать

TIFF (перевод с английского)

REVISION 5.0

Перевод с английского

.

- 2 -

Оглавление

——————————

От переводчика............................................. 4

Введение................................................... 8

Замечания по редакции ..................................... 9

Аннотация .................................................10

1. Структура ..............................................11

Заголовок файла (Image File Header - IFD) ..........11

Директории файла (Image File Directory) ............12

2. Определения ............................................14

3. Поля ...................................................15

Базовые поля .......................................15

Информационные поля ................................27

Факсимильные поля ..................................29

Поля запоминания и восстановления документов .......31

Поля, не рекомендуемые для дальнейшего

использования ......................................32

4. Частные поля ...........................................37

5. Обзор форматов файлов для изображений ..................38

6. Дополнительная информация ..............................39

Приложение A: Разумность теговой структуры ...............40

Приложение B: Сжатие данных по схеме 2 ...................42

Приложение C: Схема сжатия данных 32773 (PackBits) .......48

Приложение D: .............................................50

Приложение E: Упорядоченный список тегов TIFF ............51

Приложение F: Схема сжатия данных 5 (LZW-сжатие) .........57

Аннотация ..........................................57

Литература .........................................57

Требования .........................................57

Алгоритм ...........................................58

Декодирование LZW ..................................62

Что делать, если SamplesPerPixel больше 1 ..........63

Реализация .........................................64

Быстродействие .....................................64

Будущие расширения LZW .............................66

Благодарности ......................................66

Приложение G: Классы TIFF .................................67

Разумность .........................................67

Обзор ..............................................67

Ядро требований ....................................68

Класс TIFF B - двухуровневые изображения ...........71

Класс TIFF G - серые изображения ...................73

Класс TIFF P - цветные палитровые изображения ......73

Класс TIFF R - полностью цветные RGB-изображения ...74

Подтверждения и интерфейс для пользователя .........74

Приложение H: Цветометрическая информация изображений .....75

I. Введение .....................................75

II. Стандарты цветометрии ........................75

III. Мотивация ....................................76

IV. Цветометрическое воспроизведение .............77

V. Белая точка ..................................77

VI. Главные цвета ................................77

VII. ColorResponseCurves ..........................78

.

- 3 -

VIII. Новые теги и изменения .......................80

IX. Умолчания ....................................81

X. Ограничения и следствия ......................81

XI. Литература ...................................82

Приложение I: Схема предварительного горизонтального

дифференцирования ...........................84

Алгоритм ...........................................84

Результаты и следствия .............................86

Приложение J: Цветные палитровые изображения ..............87

Предложение.........................................87

Возражения..........................................87

Преимущества........................................88

Новые теги..........................................88

.

- 4 -

От переводчика

——————————————

Перед вами перевод спецификации 5.0 стандарта TIFF (Tag Image File

Format). Этот документ содержит всю необходимую информацию для

написания собственных программ поддержки в файлов в этом формате.

Думаю, он будет полезен всем, кто интересуется машинной графикой и

в частности таким ее аспектом, как работа с растровыми

изображениями.

TIFF является сравнительно "старым" форматом и де-факто давно уже

стал стандартом для представления изображений, получаемых со

сканеров. Однако он не получил достаточно широкого

распространения, как стандарт обмена графической информацией на

IBM PC. На мог взгляд, это объясняется двумя причинами. Во-первых,

в нем долгое время отсутствовала эффективная схема для сжатия

изображений, которые не являются черно-белыми. Во-вторых, не было

поддержки цветных изображений на основе палитры (по сути дела

таковыми являются все изображения, которые можно высвечивать на

современных графических адаптерах и мониторах IBM PC).

Введение в спецификации 5.0 схемы сжатия LZW и тегов для описания

палитровых изображений во многом устраняет эти причины. По всей

видимости можно ожидать, что область его использования будет

постепенно расширяться.

Когда я переводил этот документ, у меня уже было общее

представление об организации данного формата и не возникало

сложностей с пониманием изложенного в нем материала. Однако, когда

я стал его перечитывать с целью устранения опечаток, у меня

сложилось впечатление, что он написан несколько тяжеловесно для

человека, который знакомится с эти форматом впервые. Поэтому я

рискну кратко изложить основные концепции организации TIFF-файла.

Мне кажется, это должно помочь тем, кто совсем не знаком с эти

форматом.

1. В одном TIFF-файле может находиться несколько изображений.

2. Каждое изображение описывается с помощью набора полей или

тегов, которые определяют это изображение. В рамках исходного

документа, как и в переводе, термины тег (tag) и поле (field)

абсолютно идентичны (хотя я отдаю себе отчет, что в общем

случае это не так).

3. Каждый тег имеет строго определенное назначение и описывает

конкретные характеристики изображения (размеры, характеристики

цветов и т.д.). Иногда наполнение тега можно рассматривать как

отдельное число, но в общем случае - это массив чисел

одинакового типа.

.

- 5 -

4. Каждому тегу соответствует определенный номер, который

позволяет определить при чтении файла какую информацию

описывает данный тег. При описании тегов в спецификации

приводятся десятичные значения этого номера, а в скобках -

шестнадцатиричные.

5. В спецификации для каждого тега введены названия, которые

состоят из одного или нескольких английских слов, например,

ImageWidth, ColorMap и т.д. Эти названия чисто условны и

никогда не появляются в самом TIFF-файле. При переводе

документа все они сохранены в своем первоначальном виде

(переводить их на русский - это то же самое, что переводить

for, while, return и т.д. в программах на C или Паскале).

Текст типа "если ImageWidth=320" расшифровывается как "если

значение тега, имеющего название ImageWidth, равно 320"

(естественно, используется только для тегов, значения которых

состоят из одного числа).

6. Все теги, относящиеся к одному изображению объединяются в

рамках одного элемента внутри файла, который называется

директорией (Image File Directory - IFD). Соблюдается принцип

"одно изображение - одна директория".

7. Единственный элемент, место которого определено в файле жестко

- это заголовок из 8 байтов, с которого начинается TIFF-файл.

Все остальные элементы (директории, теги и значения тегов)

могут располагаться практически в любом месте файла.

Взаимосвязь между ними осуществляется с помощью аппарата

указателей.

Для начала этого должно быть достаточно. Всю остальное вы узнаете,

прочитав основной документ.

Несколько слов следует сказать о терминологии. Очень часто при

переводе на русский язык англоязычных текстов по вычислительной

технике приходится сталкиваться с тем, что многие термины не имеют

достаточно лаконичных эквивалентов. В результате наш богатый и

могучий обогащается еще больше словами типа свопинг, дамп,

скроллинг и т.д. Настоящий документ не является в этом смысле

исключением. Во избежание недоразумений ниже приводится перечень

терминов, перевод которых в документе может вызвать нарекания.

Bilevel image. По непонятным мне причинам авторы документа

старательно избегают термина black and white image (черно-белое

изображение) и обозначают такие изображения как bilevel image

(двухуровневое изображение). Хотя второй вариант лаконичнее, он не

совсем точен. На самом деле, все изображения, которые названы в

документе bilevel, являются именно черно-белыми, а не

произвольными двухуровневыми изображениями. Каюсь, в данном случае

я пошел на поводу у авторов документа и переводил этот термин

дословно, т.е. как двухуровневые изображения.

.

- 6 -

Grayscale image. Английское слово grayscale образовано из двух

корневых слов gray (серый) и scale (масштаб). Имеются в виду

изображения, которые передаются тонами серого цвета разной

интенсивности (классический пример - черно-белые фотографии). При

переводе использовались термины "изображение в серых тонах" или

просто "серое изображение".

Palette color image. При переводе использовался термин "цветное

палитровое изображение". Имеются в виду изображения, которые

обладают тем свойством, что число цветов в них строго ограничено

таблицей фиксированного размера (палитрой). Каждый элемент этой

таблицы задает каким либо образом цвет пиксела (как правило, в

цветовой системе RGB), который может появляться на экране.

Значения пикселов являются одно компонентными и используются как

индексы для входа в палитру. Все изображения, которые могут

высвечиваться на стандартных мониторах IBM PC обладают указанным

свойством.

Full color RGB image. Этот термин переводился как "полностью

цветное RGB-изображение" или "RGB-изображение". Здесь имеются в

виду изображения каждый пиксел которых может задаваться с помощью

трех независимых компонент (samples) интенсивностей основных

цветов в системе RGB. Перевод термина sample как "компонента"

лексически не очень точен, но на мой взгляд наиболее точно

отражает существо дела в данном конкретном случае.

Bit depth. Использовался дословный перевод "битовая глубина".

Здесь имеется ввиду число бит отводимое для определения

интенсивностей серого тона или компонент интенсивности в системе

RGB. Говорят, что компонента или само изображение тем "глубже",

чем больше это число. Иногда используются обороты типа "8-битное

серое изображение" (смысл в свете сказанного очевиден).

Differing, differ matrix. В обработке изображений существует ряд

методов, которые предназначены для передачи изображений с

использованием меньшего количества цветов или оттенков, чем

имеется в исходном изображении (например, когда требуется

напечатать образ черно-белой фотографии на матричном принтере).

Общее название этих методов в англоязычной литературе - differing.

Многие из этих методов основаны на использовании специальных

матриц, имеющих фиксированные размеры (differ matrix). Более

подробную информацию об этих методах можно, например, почерпнуть

из книги Д.Роджерса "Алгоритмические основы машинной графики" (M.,

Мир, 1989 г., стр. 131-138). Я долго пытался найти для этих

терминов приемлемые русские эквиваленты, но в конце концов

остановился на банальном "дифферинг" и "матрица дифферинга" (Да

простят меня наши лингвисты...).

Могу честно признаться, что наибольшие трудности возникли у меня

при переводе Приложения H, посвященного проблемам цветопередачи.

Во-первых, это достаточно специфическая область. Во-вторых, сам

стиль изложения в оригинале, на мой взгляд оставляет желать

лучшего (хотя это мое личное мнение). Второе обстоятельство я как

мог пытался сгладить при переводе, но не думаю, что это мне

.

- 7 -

удалось. Относительно первого должен заметить, что материал этого

Приложения может оказаться совершенно несъедобным, если не иметь

хотя бы общего представления о стандартах определения цвета. Могу

порекомендовать уже упоминавшуюся книгу Д.Роджерса (стр. 458-487).

Отдельного обсуждения заслуживает Приложение F (алгоритм

LZW-сжатия). В принципе, изложенного в нем материала

достаточно для написания собственных программ, реализующих данный

алгоритм. Однако, на мой взгляд авторы документа опустили ряд

подробностей, которые не очевидны на первый взгляд, но крайне

важны именно с точки зрения программной реализации. Если вы

собираетесь писать такие программы, то я настоятельно рекомендую

вам сначала "прокрутить" вручную случай сжатия и распаковки

потока, состояжего из N одинаковых байтов. Уверяю, что несмотря

на тривиальность этого случая, при распаковке "вылезет" весьма

нетривиальная подробность, о которой авторы документа просто

умалчивают.

В заключение должен сказать, что материал данного документа,

несмотря на явную его полезность, местами оставляет достаточное

странное впечатление. Я не обнаружил в нем явных смысловых ошибок,

но мне кажется, что иногда он носит откровенно рекламный характер,

что наносит ущерб точности изложения, а некоторые размышления его

авторов по меньшей мере спорны. Но я счел за благо воздержаться от

комментариев по ходу документа: он и так достаточно велик, а

опытные программисты и без меня поймут что к чему. Кроме того, не

дай Бог Microsoft обидится...

А.Самотохин

Институт прикладной математики AH CCCР

Москва, 1991 г.

.

- 8 -

Введение

————————

Этот меморандум был подготовлен фирмами Aldus и Microsoft

совместно с главными распространителями сканеров и другими

заинтересованными сторонами. Этот документ не является частью

обязательства Microsoft или Aldus обеспечивать поддержку этого

формата во всех приложениях. Если вам понадобится ответ на

специальные вопросы, затронутые в этом документе, или потребуются

дополнительные теги или модификации отдельных полей, обращайтесь

по любому из адресов:

Developers Desk Windows Marketing Group

Aldus Corporation Microsoft Corporation

411 First Ave. South 16011 NE 36th Way

Suite 200 Box 97017

Seattle, WA 98104 Redmond, WA 98073-9717

(206) 622-5500 (206) 882-8080

.

- 9 -

Замечания по редакции

—————————————————————

Эта редакция заменяет редакцию TIFF Revision 4. Разделы, набранные

курсивом являются новыми или значительно измененными по сравнению

с указанной версией. Новыми также являются приложения F, G и H,

хотя они и не набраны курсивом.

Главными улучшениями в TIFF 5.0 являются:

1. Сжатие серых и цветных изображений для лучшего использования

дискового пространства. См. Приложение F.

2. Классы TIFF ограничивают набор объектов TIFF, что упрощает

работу с инструментами TIFF. Возможно вы захотите просмотреть

Приложение G перед чтением оставшейся части документа. Фактически

вы можете использовать Приложение G как основной путеводитель,

возвращаясь к основному телу документа по мере необходимости для

получения подробных справок о структурах TIFF и описаний полей.

3. Поддержка цветных палитровых изображений. См. TIFF Class P в

Приложении G, и описание нового поля ColorMap.

4. Два новых тега, которые могут использоваться для более полного

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

и тем самым потенциально улучшить качество воспроизведения цветных

изображений. См. Приложение H.

Организация документа также значительно изменилась. В частности,

теги перечислены в алфавитном порядке внутри некоторых категорий в

теле главного документа.

Как всегда, любые попытки расширить функциональные возможности

выполнены таким образом, чтобы минимизировать проблемы

совместимости со старым программным обеспечением для TIFF. В

частности, многие TIFF-файлы версии 5.0 будут читаемы старыми

прикладными программами, написанными для версий TIFF 4.0 или даже

более ранних. Единственным исключением являются файлы, которые

используют новую схему сжатия LZW. Конечно, старые прикладные

программы будут "отказываться" от такого случая, но будут делать

это "изящно", если они выполняют правила, принятые для TIFF.

Мы благодарны всем, кто прочитал черновые варианты этого

документа, за их замечания. Особенно полезны были замечания Herb

Weiner из Kitchen Wisdom Publishing Company, Brad Pillow

из TrueVision, и инженеров из Hewlett Packard and Quark. Chris

Sears из Magenta Graphics снабдил нас информацией, которую мы

включили в Приложение H.

.

- 10 -

Аннотация

—————————

Этот документ описывает TIFF - формат файла, основанный на тегах,

который был разработан для содействия обмену изображениями в

цифровом виде.

При определении полей главным образом имелись в виду настольные

издательства и связанные с ними приложения. Однако, не исключено,

что TIFF может оказаться полезным и для других задач обработки

изображений.

Главный сценарий, для которого создавался TIFF, подразумевал, что

прикладная программа для сканирования или создания изображения

создает TIFF-файл, который затем читается и встраивается в

документ или публикацию с помощью программ типа настольных

издательств.

TIFF не имеет языка для принтера или языка описания страницы и не

претендует на общий стандарт описания документа. Главная цель его

разработки состояла в том, чтобы обеспечить богатую среду, внутри

которой может совершаться обмен данными по изображениям между

прикладными программами. Это богатство требовалось для того, чтобы

использовать различные возможности сканеров и сходных с ними

устройств. Поэтому TIFF разрабатывался как объединение

существующих форматов файлов для настольных сканеров (а также

графических редакторов и всего остального, что порождает

изображения, состоящие из пикселов) и он может непрерывно

совершенствоваться по мере появления новых потребностей. Высокий

приоритет был отдан структурированию данных таким образом, чтобы

снизить расходы при последующих дополнениях. TIFF разрабатывался

как расширяемый и гибкий формат обмена.

Хотя от TIFF'а требуется, чтобы он был "богатым" форматом, он

может быть легко адаптирован к простым сканерам и прикладным

программам, поскольку разработчики программ могут использовать

только те возможности, которые им нужны.

TIFF подразумевает независимость от конкретных операционных и

файловых систем, компиляторов и процессоров. Единственное

существенное допущение состоит в том, что пространство памяти

поддерживается как файл, определяемый как последовательность

8-битовых байтов, причем байты нумеруются от 0 до N. Максимальная

возможная длина TIFF-файла составляет 2**32 (2 в степени 32)

байтов. Поскольку в TIFF широко используются указатели (байтовые

смещения), TIFF-файл может легко считываться с устройства прямого

доступа типа жесткого диска или гибкой дискеты. Однако допускается

чтение и запись TIFF-файлов на магнитные ленты.

Рекомендуемым расширением для TIFF-файлов в MS-DOS, UNIX, и OS/2

является .TIF. Рекомендуемый тип файла в компьютерах Macintosh

- TIFF. Принимаются предложения для соглашений в других

вычислительных системах.

.

- 11 -

1. Структура

————————————

В TIFF конкретные поля идентифицируются с помощью уникального

тега. Это допускает присутствие или отсутствие конкретных полей в

файле в зависимости от требований конкретной задачи. Пояснения по

использованию теговых структур приведены в Приложении A.

TIFF-файл начинается с 8-байтового заголовка файла (Image File

Header), который указывает на одну или несколько директорий файла

(Image File Directories). Директории содержат информацию о

изображениях и указатели на данные самого изображения.

Теперь мы опишем эти структуры более подробно.

Заголовок файла (Image File Header - IFD)

TIFF-файл начинается с 8-байтового заголовка, содержащего

следующую информацию:

Байты 0-1: Первое слово файла определяет порядок байтов,

используемый в файле. Допустимыми его значениями являются:

II (hex 4949)

MM (hex 4D4D)

В формате II в 16-битных и 32-битных целых числах порядок

байтов всегда идет от младших (менее значимых) к старшим (более

значащим). В формате MM для тех же чисел порядок байтов идет от

старших к младшим. В обоих форматах символьные строки запоминаются

как последовательность байтов в их естественном порядке.

Все программы, читающие TIFF-файлы, должны поддерживать оба

порядка байтов (см. Приложение G).

Байты 2-3: Второе слово TIFF-файла - это номер версии. Это число,

равное 42 (2A hex), но оно не равно номеру редакции текущей

спецификации TIFF (в данном случае номер редакции текущей

спецификации - это 5.0). Фактически номер версии TIFF (42)

никогда не меняется и, возможно, никогда не изменится. Но если

это случится, то будет означать, что TIFF изменился настолько

радикально, что программа чтения TIFF должна немедленно прекратить

работу. Число 42 было выбрано из-за его глубокого философского

смысла. Оно может и должно использоваться для дополнительной

проверки того, что это действительно TIFF-файл.

TIFF-файлы не имеют явного номера редакции (т.е. 5.0 для

текущей редакция). Это решение при разработке было принято

сознательно. Во многих форматах поля могут принимать различные

значения в зависимости от номера версии. Проблема состоит в том,

что как только формат начинает "стареть", возрастают трудности по

документированию того, какие поля что означают в данной версии, и

.

- 12 -

старые программы обычно не способны к работе с файлами,

содержащими новый номер версии. Мы хотели, чтобы поля TIFF имели

постоянное и хорошо определенное значение так, чтобы "старые"

программы как правило могли читать "новые" TIFF-файлы. Последнее

снижает стоимость разработки программного обеспечения и делает его

более надежным.

Байты 4-7: Это слово типа long, содержащее смещение в байтах

первой директории файла (Image File Directory). Директория может

располагаться в любом месте файла вслед за заголовком, но ее

начало должно быть выровнено на границу слова. В частности,

директория может следовать за данными изображения, которое она

описывает. Программы чтения должны просто перемещаться по этому

указателю, вне зависимости от того, куда он указывает.

(Термин байтовое смещение (byte offset) всегда используется в

этом документе, чтобы ссылаться на положение относительно начала

файла. Первый байт файла имеет смещение, равное 0).

Директории файла (Image File Directory)

Директории файла (Image File Directory - IFD) состоят из

2-байтового счетчика числа элементов (т.е. числа тегов в данной

директории), вслед за которым расположена последовательность

12-байтовых тегов и далее 4-байтовое смещение для следующей

директории (или 0, если таковая отсутствует). Не забывайте

записывать 4 нулевых байта в конце последней директории!

Каждый 12-байтный элемент IFD имеет следующий формат:

Байты 0-1 содержат Тег (Tag) поля.

Байты 2-3 содержат Тип (Type) поля.

Байты 4-7 содержат Длину (Length) поля (здесь, возможно, более

удачным термином является Count - Счетчик).

Байты 8-11 содержат Смещение для значения (Value Offset), т.е.

байтовое смещение того места в файле, где расположено само

значение. Предполагается, что это смещение должно быть выровнено

на границу слова, т.е. Value Offset должно быть четным числом.

Это смещение может указывать на любое место в файле.

Элементы в IFD должны быть отсортированы в порядке возрастания

поля Tag. Заметим, что этот порядок отличен от того, в котором

поля описаны в данном документе. Упорядоченный по номерам список

тегов приведен в Приложении E. Значения, на которые указывают

элементы директории, могут следовать в файле в любом порядке.

Для экономии времени и пространства поле Value Offset

интерпретируется как само значение, а не как указатель на

значение, если значение умещается в 4 байтах. Если значение

меньше 4 байтов, то оно выравнивается по левому краю 4-байтового

поля, т.е. запоминается в байтах с младшими номерами. Для того,

чтобы определить умещается или нет значение в 4 байтах, следует

проверить значения полей Type и Length.

.

- 13 -

Поле Length описывает данные в терминах типов данных, а не общим

числом байтов в поле. Например, одиночное 16-битное слово (SHORT)

имеет Length равное 1, а не 2. Ниже приведены типы данных и их

длины:

1 = BYTE 8-битое беззнаковое целое.

2 = ASCII 8-битные байты, которые содержат ASCII-коды;

последний байт должен быть нулевым.

3 = SHORT 16-битное (2-байтовое) беззнаковое целое.

4 = LONG 32-битное (4-байтовое) беззнаковое целое.

5 = RATIONAL Два числа типа LONG: первое представляет

числитель дроби, второе - ее знаменатель.

Значение поля Length для данных типа ASCII включает нулевой байт.

Если необходимо выравнивание (например, на границу слова) то поле

Length не включает байты, добавляемые при выравнивании. Отметим,

что здесь не нужен байт-счетчик как в паскалевских строках.

Наличие поля Length делает его ненужным. Строго говоря, нулевой

байт в конце строк не является необходимым, но его присутствие

значительно упрощает жизнь для программистов, пишущих на C.

Программы чтения должны проверять тип данных, чтобы убедиться, что

он таков, как они ожидают. В настоящее время TIFF допускает

использование нескольких типов данных для одного и того же поля.

Например, поля ImageWidth (ширина изображения) и ImageLength

(длина изображения) описаны, как имеющие тип SHORT. На некоторых

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

изображения, имеющие более 64K строк или колонок. Вместо

добавления параллельного LONG-тега для этих полей, проще допустить

возможность использования типов и SHORT и LONG для поля ImageWidth

и подобного ему. В Приложении G приведены рекомендации по этому

поводу.

Заметим, что файле может существовать несколько IFD. Говорят, что

каждый IFD определяет суб-файл (subfile). Одна из потенциальных

возможностей использования последовательных суб-файлов состоит в

описании суб-изображений, каждое из которых связано с главным,

например, является его версией с уменьшенным разрешением.

Если вы еще не сделали этого, вы можете обратиться к Приложению G,

чтобы изучить примеры TIFF-изображений.

.

- 14 -

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]