В TIFF метаданные и есть файл
Все прочие форматы приделывают метаданные сбоку: JPEG кладёт блок TIFF внутрь сегмента APP1, HEIC хранит его элементом, PNG выдумал чанки. У TIFF нет сегмента, потому что он и не нужен — файл открывается 8-байтовым заголовком, указывающим на Image File Directory, и этот каталог одновременно список тегов и указатель на пиксели. Читая EXIF где угодно ещё, вы читаете обрывок TIFF, скопированный в другой контейнер.
Порядок байтов объявляют, а не предполагают
TIFF начинается с II или MM — Intel или Motorola, от младшего или от старшего байта — а следом пишет число 42 в том же порядке как самопроверку. Всё, что идёт дальше, каждое смещение и каждое целое, читается именно так. Поэтому один и тот же тег может лежать в двух разных раскладках байтов, и поэтому обрезанный TIFF отказывает так полно: потеряв заголовок, нельзя истолковать ни одного смещения в файле.
Один файл, несколько каталогов
IFD сцеплены: каждый кончается смещением следующего или нулём. Многостраничное сканирование использует эту цепочку для страниц, а миниатюра обычно лежит во втором каталоге. EXIF и GPS — подкаталоги, подвешенные к первому тегами-указателями. Так что таблица ниже, возможно, показывает вам первую страницу из нескольких — и сырой DNG, который есть TIFF с добавочными тегами, устроен так же.
Где TIFF держит вещи
- II / MM
- Порядок байтов, в первых двух байтах. Всё остальное читается через него.
- IFD0
- Основной каталог: теги изображения, марка, модель, ориентация, разрешение.
- IFD1
- Второй каталог, по обычаю миниатюра или следующая страница.
- ExifIFD
- Экспозиция, объектив и время съёмки. Подкаталог, к которому ведёт тег-указатель.
- GPSIFD
- Широта, долгота, высота. Ещё один подкаталог.
- StripOffsets
- Где лежат пиксели. Такой же тег, как все — в этом и суть.
Вопросы о TIFF
Почему теги читаются, если браузер не показывает изображение?Открыть
Потому что прочесть теги — значит пройти по каталогам и смещениям, а это арифметика, тогда как показать изображение требует декодера под то сжатие, которым пользуется файл. Ни один распространённый браузер декодера TIFF не несёт. Предпросмотр скажет, что недоступен; таблица тегов будет полной.
DNG — это то же самое, что TIFF?Открыть
По устройству почти. DNG построен на TIFF/EP, поэтому у него тот же заголовок, те же каталоги и те же 12-байтовые записи тегов плюс дополнительные теги для сырых данных сенсора. Всё, что вы узнали здесь про IFD, к нему применимо.
В моём TIFF 40 страниц. Какую я вижу?Открыть
Первую. Каталоги — связный список, и эта рабочая область читает тот, на который указывает заголовок, то есть первую страницу. Дальнейшие страницы несут собственные теги и не показываются.
Как очищается TIFF?Открыть
Через очистку перекодированием, которая выгружает JPEG. Поскольку теги TIFF и его указатель на пиксели живут в одной структуре, отпустить теги и оставить файл TIFF'ом в браузере невозможно — да и записать TIFF ни один браузер всё равно не умеет.
Что он умеет
- Удалить данные EXIF
- Перетащите фотографию и скачайте копию без вшитых метаданных. У JPEG отпадает сегмент EXIF без единого касания пикселей; HEIC, PNG, WebP и остальные перекодируются. Ничего не загружается на сервер.
- Убрать GPS-координаты
- Посмотрите координаты, которые несёт фотография, и скачайте копию без них. JPEG теряет теги места и сохраняет всё остальное. Ничего не загружается на сервер.
- Править EXIF у JPEG
- Меняйте заголовок, автора, описание, права, программу и время съёмки у JPEG, а затем скачивайте изменённую копию. Работает на устройстве; ваш исходный файл никогда не трогают.
- Просмотрщик XMP, IPTC и ICC
- Читайте каждую группу метаданных, которую несёт файл — EXIF, XMP, IPTC, ICC, заметки производителя — сгруппированными и выгружаемыми в JSON. Для контроля качества материалов, экспертизы и отладки цепочки. Ничего не загружается на сервер.
- Открыть несколько фотографий
- Откройте до пятидесяти фотографий, посмотрите, у каких есть местоположение, и заберите весь набор таблицей. Ничего не загружается, а оригиналы никогда не перезаписываются.