使用libTIFF将标签的字节数组写入tiff文件

时间:2016-02-24 16:51:48

标签: image tiff exif libtiff

我想知道,有没有办法使用libTIFF将一个字节数组作为整个数据块(多个标签)写入.tiff文件?

据我所知,.tiff文件由于随机数据块(IFD)位置而无法流式传输。但是,正如我可以假设的那样,该块内的数据是以预定义的顺序写入的。我想要完成的是将整个exif属性字节块从jpeg文件写入我的tiff中的“Exif IFD”。

那么,是否有像TIFFSetField()那样的函数来填充整个数据块(IFD)?

2 个答案:

答案 0 :(得分:1)

您可以编写自己的TIFF数据块,并在该块内部,使用" private"格式化数据。格式(如果内存服务的话,就是RichTIFFIPTC的情况)。您无法做的是向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格式可能会为您提供有效编写并由您现有的软件工具正确处理的文件,但不会与其他工具兼容 - 这可能是在您完成后发现的的工作。

答案 1 :(得分:0)

显然不是。 documentation states

  

TIFF规范要求除8字节外的所有信息   标头可以放在文件中的任何位置。特别是,它是   完全合法的目录信息后写   图像数据本身。因此,TIFF本身并不适合   通过面向流的机制,如UNIX管道。   需要将数据组织在特定文件中的软件   订单(例如图像数据之前的目录信息)没有   正确支持TIFF。 libtiff没有提供控制机制   将数据放在文件中;通常写入图像数据   在目录信息之前。