2016-02-24 7 views
1

Мне было интересно, есть ли способ написать массив байтов как целого блока данных (количество тегов) в .tiff-файл с помощью libTIFF?Запись байтового массива тегов в файл tiff с использованием libTIFF

Насколько я знаю, .tiff-файл не является потоковым из-за местоположения случайных данных (IFD). Но, как я могу предположить, данные внутри этого блока записываются в предопределенном порядке. То, что я пытаюсь выполнить, - написать весь блок байтов свойств exif из jpeg-файла в «Exif IFD» внутри моего tiff.

Итак, есть ли какая-либо функция, такая как TIFFSetField(), которая заполняет весь блок данных (IFD)?

ответ

1

Вы можете написать собственный блок данных TIFF, а внутри этого блока данные форматируются с помощью «частного» формата (в случае использования памяти RichTIFFIPTC - в случае памяти). То, что вы не может do отправляет несколько тегов объекту TIFF и ожидает, что они попадут в какой-либо конкретный порядок.

Я считаю, что Photoshop, среди прочего, всегда пишет объект данных фиксированной длины как один тег, а затем перезаписывает его внутренности в свободное время.

В связи с тем, что сбор EXIF ​​и TIFF тегов коллекции перекрываться, вы не можете сделать это и есть ваши теги доступны для чтения LibTIFF, хотя:

[tag1],[tag2],[tag3] ---> [privateTiffLongObject] --> not re-readable 
[tag1],[tag2],[tag3] ---> [Tiff2],[Tiff3],[Tiff1] --> re-readable 

Это говорит, что это, что вы пытаетесь достичь? Чтобы просто перетащить теги из файла JPEG в файл TIFF, я бы рискнул, что exiftool должно быть достаточно. Я часто использовал рабочий процесс, как в следующем:

(image) --> exiftool --> XML --> XML parsers --> 
--> exiftool --> (new image) 

Конечно, если вам нужно сделать, это для большой партии изображений, выступление может стать проблемой. Однако эту проблему можно решить с помощью RAM-дисков и устройств SSD.

«Взлом» формата TIFF может оставить вас с файлами, которые эффективно написаны и правильно обработаны программными средствами, которые у вас есть сейчас, но не будут совместимы с каким-либо другим инструментом в другом месте - и это может быть обнаружено после вас 've done недель работы.

+0

Спасибо за ваш ответ, я предполагаю, что в итоге я просто воспользуюсь функцией TIFFSetField() несколько раз для всех тегов exif. –

+0

Взлом tiff в моем случае не является вариантом, потому что файл должен быть хорошо читаемым Photoshop со всеми тегами exif. И у меня ограничены только программные механизмы (невозможно использовать какие-либо инструменты).Я пытался получить производительность, написав весь блок байтов, как и EXIF ​​IFD (потому что у меня его уже есть). К сожалению, оказывается, что в этом случае это не сработает. –

+0

Я думаю, что Photoshop предпочтительно читает одно отдельное поле в формате XMP. Сегодня вечером я получу свои заметки, но вы можете посмотреть на это. – LSerni

0

Видимо, нет. documentation states: спецификация

TIFF требует, чтобы вся информация, за исключением 8-байтового заголовка может быть размещен в любом месте в файле. В частности, это совершенно законно для информации каталога, которая должна быть записана после самих данных изображения . Следовательно, TIFF по своей природе не подходит для , проходящего через механизм, ориентированный на поток, такой как UNIX-трубы. Программное обеспечение, которое требует, чтобы данные были организованы в файле в определенном заказе (например, информация каталога перед данными изображения), не правильно поддерживает TIFF. libtiff не предоставляет механизма для управления размещения данных в файле; данные изображения обычно записываются перед информацией о каталоге.