Обновление тегов в существующем образе с помощью каталога дубликатов LibTiff.Net
Я пытаюсь изменить значения нескольких пользовательских тегов ASCII в существующем изображении TIFF, как показано в примере на http://bitmiracle.com/libtiff/help/add-custom-tiff-tags-to-an-existing-tiff-image.aspx.
Изменения в основном включают добавление к строкам существующих тегов или добавление пользовательских тегов, которые не существуют.
Однако при добавлении новых тегов LibTiff, кажется, добавляет совершенно новый каталог в конец изображения, вместо того, чтобы изменять существующий, который остается в такте. Я проверил это с WinHex, а также попробовал несколько разных подходов, таких как WriteDirectory, CheckpointDirectory. Файл открывается для добавления.
Двойной каталог вызывает проблему с другой программой вне нашего контроля, которая должна обрабатывать изображения.
Есть ли способ просто обновить существующий каталог? Или, если необходимо переписать весь файл, могу ли я получить несколько советов, как это сделать? Если файл перезаписан, существуют другие пользовательские теги, которые необходимо сохранить.
2 ответа
Если вы добавляете новые теги в существующий каталог или изменяете некоторые существующие теги, то вам лучше заменить существующий каталог новым. В противном случае ваши теги могут перезаписать растровые данные (потому что обновленный каталог требует больше места, чем старый).
Итак, вы правы, предполагая, что вам нужно переписать весь файл, если программа не может правильно обрабатывать файлы с обновленной цепочкой каталогов.
Возможно, вы захотите взглянуть на исходный код утилиты TiffCP, поставляемой с библиотекой. Исходный код должен дать вам достаточно подсказок для начала. Утилита повторно сжимает данные в файле, но вам, вероятно, не требуется это делать. Вы можете просто скопировать сжатые данные с ReadRawStrip
а также WriteRawStrip
методы. Утилита также копирует все теги. Это то, что вам обязательно нужно сделать в своем коде (изменение / добавление тегов одновременно).
Согласно документации libbit.net: метод Tiff.Open
поддерживается только режим "r", "w", "a", плюс некоторый второстепенный режим, здесь нет "r +", как в fopen для поддержки чтения и записи в tiff.
В нативной библиотеке libtiff есть утилита, которую можно использовать для изменения указанного тега tiff:
tiffset -s XResolution 400 test.tif
tiffinfo test.tif может быть использован для проверки результата.