Основные тэги формата tiff: Основные тэги формата TIFF | это… Что такое Основные тэги формата TIFF?
Основные тэги формата TIFF | это… Что такое Основные тэги формата TIFF?
TIFF (англ. Tagged Image File Format) — формат хранения растровых графических изображений. Изначально был разработан компанией Microsoft, для использования с NeXTStep, и из неё поддержка этого формата перешла в Mac OS X. Владелец спецификаций Adobe, владеющей в настоящее время авторским правом на эти спецификации.[уточнить]
Файлы формата TIFF, как правило, имеют расширение .tiff
или .tif
.
Содержание
|
Поддерживаемые форматы хранения данных
Формат является весьма гибким. Позволяет сохранять изображения в режиме цветов с палитрой, а также в различных цветовых пространствах:
- Черно-белого битового
- Полутоновом
- С индексированой палитрой
- CMYK
- YCbCr
- CIE Lab
Поддерживаются режимы 8, 16, 32 и 64 бит на канал при целочисленном, а также 32 и 64 бит на канал при представлении цвета числом с плавающей запятой.
Сжатие
Имеется возможность сохранять изображение в файле формата TIFF со сжатием и без сжатия. Степени сжатия зависят от особенностей самого сохраняемого изображения, а также и от используемого алгоритма. Формат TIFF позволяет использовать следующие алгоритмы сжатия:
- PackBits (RLE)
- Lempel-Ziv-Welch (LZW)
- ZIP
- JPEG
При этом JPEG является просто инкапсуляцией формата JPEG в формат TIFF. Формат TIFF позволяет хранить изображения, сжатые по стандарту JPEG, без потерь данных.
Алгоритмы CCITT Group 3 и 4 (иногда называют Fax 3, Fax 4) предназначены для кодирования бинарных растровых изображений. Первоначально они были разработаны для сетей факсимильной связи. В настоящий момент также используются в полиграфии, системах цифровой картографии и географических информационных системах. Алгоритм Group 3 напоминает RLE, т. к. кодирует линейные последовательности пикселов, а Group 4 — двумерные поля пикселов.
Теги формата TIFF
Так как TIFF является теговым форматом, то нужно сказать, что различают следущие виды тегов:
Основные теги
Теги, составляющие ядро формата TIFF, и которые в обязательном порядке должны поддерживаться всеми продуктами, реализующими TIFF в соответствии со спецификацией формата TIFF.
Код | Hex | Имя | Описание |
---|---|---|---|
254 | 0x00FE | NewSubfileType | Тип данных, хранящихся в этом файле. Этот тег является заменой тегу SubfileType, и является очень полезным, когда в одном TIFF файле хранится несколько изображений. |
255 | 0x00FF | SubfileType | Тип данных, хранящихся в этом файле (старый). |
256 | 0x0100 | ImageWidth | Количество колонок в изображении. |
257 | 0x0101 | ImageLength | Количество строк в изображении. |
258 | 0x0102 | BitsPerSample | Количество бит в компоненте. Этот тег предполагает различное число битов в каждом компоненте (хотя в большинстве случаев оно одинаковое). Например, для RGB может быть 8 для всех компонентов — красного, зеленого и голубого, или 8,8,8 для каждого из компонентов. |
259 | 0x0103 | Compression | Используемый вид компресии. |
262 | 0x0106 | PhotometricInterpretation | Используемая цветовая модель. |
263 | 0x0107 | Threshholding | Вид преобразования серого в черное и белое для черно-белых изображений. |
264 | 0x0108 | CellWidth | Количество колонок в матрице преобразования из серого в черное и белое. |
265 | 0x0109 | CellWidth | Количество строк в матрице преобразования из серого в черное и белое. |
266 | 0x010A | FillOrder | Логический порядок битов в байте. |
270 | 0x010E | ImageDescription | Описание изображения. |
271 | 0x010F | Make | Производитель изображения. |
272 | 0x0110 | Model | Модель или серийный номер. |
273 | 0x0111 | StripOffsets | Смещение для каждой полосы изображения в байтах. |
274 | 0x0112 | Orientation | Ориентация изображения. |
277 | 0x0115 | SamplesPerPixel | Количество компонентов на пиксель. |
278 | 0x0116 | RowsPerStrip | Количество строк на полосу. |
279 | 0x0117 | StripByteCounts | Количество байт на полосу после компресии. |
280 | 0x0118 | MinSampleValue | Минимальное значение, используемое компонентом. |
281 | 0x0119 | MaxSampleValue | Максимальное значение, используемое компонентом. |
282 | 0x011A | XResolution | Количество пикселей в ResolutionUnit строки. |
283 | 0x011B | YResolution | Количество пикселей в ResolutionUnit столбца. |
284 | 0x011C | PlanarConfiguration | Метод хранения компонентов каждого пикселя. |
288 | 0x0120 | FreeOffsets | Смещение в байтах к строке неиспользуемых байтов. |
289 | 0x0121 | FreeByteCounts | Количество байтов в строке неиспользуемых байтов. |
290 | 0x0122 | GrayResponseUnit | Разрешение данных, хранящихся в GrayResponseCurve. |
291 | 0x0123 | GrayResponseCurve | Величина плотности серого. |
296 | 0x0128 | ResolutionUnit | Разрешение данных, хранящихся в XResolution, YResolution. |
305 | 0x0141 | Software | Имя и версия программного продукта. |
306 | 0x0142 | DateTime | Дата и время создания изображения. |
316 | 0x013B | Artist | Имя создателя изображения. |
315 | 0x013С | HostComputer | Компьютер и операционная система, использованные при создании изображения. |
320 | 0x0140 | ColorMap | Цветовая таблица для изображений, использующих палитру цветов. |
338 | 0x0152 | ExtraSamples | Описание дополнительных компонентов. |
33432 | 0x8298 | Copyright | Имя владельца прав на хранимое изображение. |
Расширенные теги
Теги, составляющие ядро формата TIFF, но, в отличие от основных тегов формата TIFF, они не должны в обязательном порядке поддерживаться продуктами, реализующими TIFF в соответствии со спецификацией формата TIFF.
Специальные теги формата TIFF
Специальные теги TIFF формата изначально были определены фирмой Adobe. Они предназначены для хранения в TIFF формате специальных типов данных производителей программного обеспечения, и должны быть зарегистрированы фирмой Adobe.
Основные тэги формата TIFF | это… Что такое Основные тэги формата TIFF?
TIFF (англ. Tagged Image File Format) — формат хранения растровых графических изображений. Изначально был разработан компанией Microsoft, для использования с NeXTStep, и из неё поддержка этого формата перешла в Mac OS X. Владелец спецификаций Adobe, владеющей в настоящее время авторским правом на эти спецификации.[уточнить]
Файлы формата TIFF, как правило, имеют расширение .tiff
или .tif
.
Содержание
|
Поддерживаемые форматы хранения данных
Формат является весьма гибким. Позволяет сохранять изображения в режиме цветов с палитрой, а также в различных цветовых пространствах:
- Черно-белого битового
- Полутоновом
- С индексированой палитрой
- CMYK
- YCbCr
- CIE Lab
Поддерживаются режимы 8, 16, 32 и 64 бит на канал при целочисленном, а также 32 и 64 бит на канал при представлении цвета числом с плавающей запятой.
Сжатие
Имеется возможность сохранять изображение в файле формата TIFF со сжатием и без сжатия. Степени сжатия зависят от особенностей самого сохраняемого изображения, а также и от используемого алгоритма. Формат TIFF позволяет использовать следующие алгоритмы сжатия:
- PackBits (RLE)
- Lempel-Ziv-Welch (LZW)
- ZIP
- JPEG
При этом JPEG является просто инкапсуляцией формата JPEG в формат TIFF. Формат TIFF позволяет хранить изображения, сжатые по стандарту JPEG, без потерь данных.
Алгоритмы CCITT Group 3 и 4 (иногда называют Fax 3, Fax 4) предназначены для кодирования бинарных растровых изображений. Первоначально они были разработаны для сетей факсимильной связи. В настоящий момент также используются в полиграфии, системах цифровой картографии и географических информационных системах. Алгоритм Group 3 напоминает RLE, т. к. кодирует линейные последовательности пикселов, а Group 4 — двумерные поля пикселов.
Теги формата TIFF
Так как TIFF является теговым форматом, то нужно сказать, что различают следущие виды тегов:
Основные теги
Теги, составляющие ядро формата TIFF, и которые в обязательном порядке должны поддерживаться всеми продуктами, реализующими TIFF в соответствии со спецификацией формата TIFF.
Код | Hex | Имя | Описание |
---|---|---|---|
254 | NewSubfileType | Тип данных, хранящихся в этом файле. Этот тег является заменой тегу SubfileType, и является очень полезным, когда в одном TIFF файле хранится несколько изображений. | |
255 | 0x00FF | SubfileType | Тип данных, хранящихся в этом файле (старый). |
256 | 0x0100 | ImageWidth | Количество колонок в изображении. |
257 | 0x0101 | ImageLength | Количество строк в изображении. |
258 | 0x0102 | BitsPerSample | Количество бит в компоненте. Этот тег предполагает различное число битов в каждом компоненте (хотя в большинстве случаев оно одинаковое). Например, для RGB может быть 8 для всех компонентов — красного, зеленого и голубого, или 8,8,8 для каждого из компонентов. |
259 | 0x0103 | Compression | Используемый вид компресии. |
262 | 0x0106 | PhotometricInterpretation | Используемая цветовая модель. |
263 | 0x0107 | Threshholding | Вид преобразования серого в черное и белое для черно-белых изображений. |
264 | 0x0108 | CellWidth | Количество колонок в матрице преобразования из серого в черное и белое. |
265 | 0x0109 | CellWidth | Количество строк в матрице преобразования из серого в черное и белое. |
266 | 0x010A | FillOrder | Логический порядок битов в байте. |
270 | 0x010E | ImageDescription | Описание изображения. |
271 | 0x010F | Make | Производитель изображения. |
272 | 0x0110 | Model | Модель или серийный номер. |
273 | 0x0111 | StripOffsets | Смещение для каждой полосы изображения в байтах. |
274 | 0x0112 | Orientation | Ориентация изображения. |
277 | 0x0115 | SamplesPerPixel | Количество компонентов на пиксель. |
278 | 0x0116 | RowsPerStrip | Количество строк на полосу. |
279 | 0x0117 | StripByteCounts | Количество байт на полосу после компресии. |
280 | 0x0118 | MinSampleValue | Минимальное значение, используемое компонентом. |
281 | 0x0119 | MaxSampleValue | Максимальное значение, используемое компонентом. |
282 | 0x011A | XResolution | Количество пикселей в ResolutionUnit строки. |
283 | 0x011B | YResolution | Количество пикселей в ResolutionUnit столбца. |
284 | 0x011C | PlanarConfiguration | Метод хранения компонентов каждого пикселя. |
288 | 0x0120 | FreeOffsets | Смещение в байтах к строке неиспользуемых байтов. |
289 | 0x0121 | FreeByteCounts | Количество байтов в строке неиспользуемых байтов. |
290 | 0x0122 | GrayResponseUnit | Разрешение данных, хранящихся в GrayResponseCurve. |
291 | 0x0123 | GrayResponseCurve | Величина плотности серого. |
296 | 0x0128 | ResolutionUnit | Разрешение данных, хранящихся в XResolution, YResolution. |
305 | 0x0141 | Software | Имя и версия программного продукта. |
306 | 0x0142 | DateTime | Дата и время создания изображения. |
316 | 0x013B | Artist | Имя создателя изображения. |
315 | 0x013С | HostComputer | Компьютер и операционная система, использованные при создании изображения. |
320 | 0x0140 | ColorMap | Цветовая таблица для изображений, использующих палитру цветов. |
338 | 0x0152 | ExtraSamples | Описание дополнительных компонентов. |
33432 | 0x8298 | Copyright | Имя владельца прав на хранимое изображение. |
Расширенные теги
Теги, составляющие ядро формата TIFF, но, в отличие от основных тегов формата TIFF, они не должны в обязательном порядке поддерживаться продуктами, реализующими TIFF в соответствии со спецификацией формата TIFF.
Специальные теги формата TIFF
Специальные теги TIFF формата изначально были определены фирмой Adobe. Они предназначены для хранения в TIFF формате специальных типов данных производителей программного обеспечения, и должны быть зарегистрированы фирмой Adobe.
Базовые теги TIFF
Базовые теги TIFF — это те теги, которые перечислены как часть ядра TIFF, основы, которые все основные разработчики TIFF должны поддерживать в своих продуктах, согласно TIFF. Спецификация.
Код | Наименование | Краткое описание | |
---|---|---|---|
Декабрь | Hex | ||
254 | 00FE | NewSubfileType | Общее указание на тип данных, содержащихся в этом подфайле. |
255 | 00FF | Тип подфайла | Общее указание на тип данных, содержащихся в этом подфайле. |
256 | 0100 | ImageWidth | Количество столбцов в изображении, т. е. количество пикселей в строке. |
257 | 0101 | ImageLength | Количество строк пикселей в изображении. |
258 | 0102 | BitsPerSample | Количество битов на компонент. |
259 | 0103 | Сжатие | Схема сжатия данных изображения. |
262 | 0106 | Фотометрическая интерпретация | Цветовое пространство данных изображения. |
263 | 0107 | Порог | Для черно-белых файлов TIFF, представляющих оттенки серого, метод, используемый для преобразования серых пикселей в черно-белые. |
264 | 0108 | Ширина ячейки | Ширина матрицы дизеринга или полутонового изображения, используемой для создания двухуровневого файла с дизерингом или полутоновым изображением. |
265 | 0109 | длина ячейки | Длина матрицы дизеринга или полутонового изображения, используемой для создания двухуровневого файла с дизерингом или полутоновым изображением. |
266 | 010A | FillOrder | Логический порядок битов в байте. |
270 | 010E | ImageDescription | Строка, описывающая тему изображения. |
271 | 010F | Марка | Производитель сканера. |
272 | 0110 | Модель | Название или номер модели сканера. |
273 | 0111 | StripOffsets | Для каждой полосы смещение в байтах этой полосы. |
274 | 0112 | Ориентация | Ориентация изображения относительно строк и столбцов. |
277 | 0115 | SamplesPerPixel | Количество компонентов на пиксель. |
278 | 0116 | RowsPerStrip | Количество строк в полосе. |
279 | 0117 | StripByteCounts | Для каждой полосы количество байтов в полосе после сжатия. |
280 | 0118 | MinSampleValue | Минимальное используемое значение компонента. |
281 | 0119 | MaxSampleValue | Максимальное используемое значение компонента. |
282 | 011A | XResolution | Количество пикселей на единицу разрешения в направлении ширины изображения. |
283 | 011B | YResolution | Количество пикселей на ResolutionUnit в направлении ImageLength. |
284 | 011C | PlanarConfiguration | Как хранятся компоненты каждого пикселя. |
288 | 0120 | FreeOffsets | Для каждой строки смежных неиспользуемых байтов в файле TIFF смещение строки в байтах. |
289 | 0121 | FreeByteCounts | Для каждой строки смежных неиспользуемых байтов в файле TIFF количество байтов в строке. |
290 | 0122 | GrayResponseUnit | Точность информации, содержащейся в GrayResponseCurve. |
291 | 0123 | GrayResponseCurve | Для данных в градациях серого — оптическая плотность каждого возможного значения пикселя. |
296 | 0128 | ResolutionUnit | Единица измерения XResolution и YResolution. |
305 | 0131 | Программное обеспечение | Название и номер версии пакета(ов) программного обеспечения, использованного для создания образа. |
306 | 0132 | DateTime | Дата и время создания образа. |
315 | 013B | Художник | Человек, создавший изображение. |
316 | 013C | HostComputer | Компьютер и/или операционная система, которые использовались во время создания образа. |
320 | 0140 | ColorMap | Цветовая карта для изображений палитры цветов. |
338 | 0152 | ExtraSamples | Описание дополнительных компонентов. |
33432 | 8298 | Авторские права | Уведомление об авторских правах. |
Чтение тегов Tiff 🏷
В настоящее время я добавляю несколько других форматов в Areo, мой инструмент «берет двоичные данные высот и превращает их в экспортируемую 3D-сетку», одним из которых является Geotiff. Вместо того, чтобы просто понять, как читать формат (бу, скучно, бух), я подумал, что попробую создать инструмент в браузере для чтения локальных файлов tiff, показа 2D-превью с пользовательским цветовым сопоставлением и создания загружаемой 3D-сетки. предварительные просмотры, если применимо (ура, 3D-вещи, ура!) Я также подумал, что вкратце напишу все это по ходу дела. 👋
- Эта статья Патрика Армстронга очень быстро помогла мне понять, как именно форматируется информация заголовка в файле .tiff. Патрик также занимается такими вещами, как сжатие, которым я обязательно займусь в будущем.
- Хотите узнать, что это за случайный идентификатор тега TIFF? Хотите знать все возможные значения в его перечислении? Что ж, Джорис Ван Дамм из Aware Systems поможет вам! Этот сайт в основном представляет собой библию тегов TIFF. Было безумно полезно.
- Как и Maptools.org! Многие моих поисков в Google вернули меня к фантастически подобранной информации на этом сайте.
- PDF Tiff Summary Пола Бурка также был SUPER полезен для разъяснения различных типов данных, используемых в этом формате.
- Наконец, я наткнулся на фантастический инструмент Эмили Селвуд Tiff Hax, когда я углублялся в чтение IFD, и хотя я еще не вникал в Go, это было фантастически полезное средство проверки работоспособности, когда дело дошло до тестирования моего собственного кода. !
Порядок байтов и очень волшебное число
В начале каждый файл .tiff содержит 8 байтов данных. Что-то вроде:
4D4D002A 00000008
Первые 2 байта будут либо 4D (т.е. 77 как UInt8), либо 49 (т.е. 73 как UInt8). Если это 4D (77) , то порядок байтов в файле — BigEndian, если это 49 (73) , то порядок байтов — LittleEndian. Таким образом, приведенный выше пример является BigEndian.
3-й или 4-й байт (в зависимости от вновь найденного порядка байтов) является магическим числом. Короче говоря, если это не 42 , то этот не является TIFF-файлом. Время вернуться/сбросить ошибку/уйти и пообедать.
Последние 4 байта, преобразованные в тип long (т. е. 4 байта, 32-битное целое число без знака), дают нам смещение относительно того места, где начинается первый основной раздел информации заголовка. Что приводит меня к…
IFD, подфайлы, группы изображений…
Один файл tiff может содержать несколько разных (но чаще всего, по крайней мере, косвенно связанных) изображений внутри себя. Эти подфайлы могут быть невероятно полезны для хранения прокси-файлов основного изображения с более низким разрешением, данных маски, информации о наложении — практически всего, что вы хотите связать с данными основного изображения.
Каждый из этих подфайлов описывается каталогом файлов изображений (IFD) — разделом информации заголовка, содержащим все метаданные, связанные с этим подфайлом. В теории. На практике некоторые теги в первом IFD обычно имеют отношение к одному или нескольким последующим IFD, и по мере углубления вы можете найти другие совершенно отдельные IFD, содержащие 9 тегов.0387 еще более метаданных, относящихся к первому IFD. Размолвки не что иное, как не гибкие.
Если мы следуем 8-байтовому смещению, которое мы нашли выше, мы окажемся в начале нашего первого IFD, который начинается с этих двух байтов:
0010
Это наш счетчик полей IFD, который после преобразования в UInt8 говорит нам, что теперь нам нужно найти и проанализировать 16 полей.
Поля. О, так много полей…
Поля IFD всегда имеют длину 12 байт, поэтому давайте возьмем следующие 12 байт и начнем синтаксический анализ:
01000003 00000001 0C8
Первые 2 байта дают нам идентификатор тега TIFF. Преобразование 0100
в короткое (также известное как 16-разрядное целое число без знака) дает нам значение 256. Один поиск в справочнике тегов AwareSystems Tiff позже и:
Мы нашли тег ImageWidth ! Давайте двигаться дальше и попробуем получить саму ширину.
3-й и 4-й байты дают нам тип данных этого тега. Превращаем в короткую, наша 0003
дает значение 3, что означает, что ширина изображения также будет короткой.
Следующие 4 байта дают нам количество значений для текущего поля в виде 32-битного целого числа без знака. В нашем случае выше 00000001
говорит нам, что (логически) ImageWidth имеет только одно значение.
Поведение оставшихся 4 байтов немного отличается от поля к полю, в зависимости от данных, которые поле представляет. Для некоторых полей с одним (часто числовым) связанным значением все данные этого значения можно найти непосредственно в байтах поля. Однако в полях, представляющих более сложные значения (такие как массивы информации, более длинные строки и т. д.), оставшиеся байты просто действуют как смещение относительно того места, где эта информация хранится в основной части TIFF-файла.
Чтобы определить, представляют ли последние байты смещение, мы можем выполнить простой расчет:
(количество значений) * (количество байтов на значение) > (количество оставшихся байтов)
Мы знаем, что мы только осталось 4 байта от наших исходных 12 байтов данных поля, мы уже вычислили количество значений и знаем, что тип данных короткий (т. е. 2 байта на значение). Таким образом, в случае нашего поля ImageWidth этот расчет становится следующим:
isOffset = (1 * 2) > 4
Это оценивается как false в нашем случае ImageWidth , что означает, что последние 4 байта представляют фактическое значение поля. Эти байты равны 0C8
, и теперь мы можем преобразовать их в значение 3209 . Мы нашли ширину нашего tiff-файла!
Если бы isOffset разрешилось в true , нам пришлось бы выполнить последующий поиск в файле tiff, используя значение последних 4 байтов в качестве нашего смещения, и (количество значений) * (количество байтов на значение)
как наш счетчик байтов.
Следующий IFD…
Через 16 полей по 12 байт есть еще 8 полезных байтов, которые составляют текущий IFD. Преобразованные в длинные, эти байты дают вам смещение в байтах до следующего IFD, содержащегося в файле tiff.
Если это байтовое смещение > 0, вам нужно будет зациклиться и повторить анализ всего поля в этом новом IFD. Если это последний IFD в файле, смещение в байтах будет равно 0, и теперь вы можете относительно спокойно прекратить обработку IFD. Ура!
Так заканчивается первая довольно сухая статья о Жеоде! Весело, а? 😬 Я надеюсь, что вышеизложенное может оказаться полезным для тех, кто думает о попытке сделать что-то подобное.