3

我正在尝试更改现有 TIFF 图像中一些自定义 ASCII 标记的值,如http://bitmiracle.com/libtiff/help/add-custom-tiff-tags-to-an-中的示例所示现有的 tiff-image.aspx

这些更改主要涉及添加到现有标签的字符串,或添加不存在的自定义标签。

但是,在添加新标签时,LibTiff 似乎在图像末尾添加了一个全新的目录,而不是更改现有的目录,该目录保持不变。我已经用 WinHex 验证了这一点,还尝试了几种不同的方法,例如 WriteDirectory、CheckpointDirectory。正在打开文件以进行附加。

重复的目录导致另一个我们无法控制的程序出现问题,该程序必须处理图像。

有没有办法只更新现有目录?或者,如果有必要重写整个文件,我能否得到一些关于如何做到这一点的指示?如果文件被重写,则需要保留其他自定义标签。

4

2 回答 2

1

如果您将新标签添加到现有目录或更改某些现有标签,那么您最好用新目录替换现有目录。否则,您的标签可能会覆盖栅格数据(因为更新后的目录比旧目录需要更多空间)。

因此,如果程序无法正确处理具有更新目录链的文件,那么您假设您需要重写整个文件是正确的。

您可能想查看库附带的 TiffCP 实用程序的源代码。源代码应该为您提供足够的开始线索。该实用程序会重新压缩文件中的数据,但您可能不需要这样做。您可以使用ReadRawStripWriteRawStrip方法复制压缩数据。该实用程序还复制所有标签。这是您绝对需要在代码中执行的操作(同时更改/添加标签)。

于 2013-02-17T12:29:55.637 回答
0

According to libbit.net documentation: Tiff.Open Method

only "r" "w" "a" mode is supported, plus some minor mode, there's no "r+" as in fopen to support both read and write to tiff.

The native libtiff library has a utility which can be used to change specified tiff tag:

tiffset -s XResolution 400 test.tif

tiffinfo test.tif can be used to verify the result.

于 2016-10-20T01:31:27.030 回答