Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/38.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Image 使用libTIFF将标记的字节数组写入tiff文件_Image_Tiff_Exif_Libtiff - Fatal编程技术网

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

Image 使用libTIFF将标记的字节数组写入tiff文件,image,tiff,exif,libtiff,Image,Tiff,Exif,Libtiff,我想知道,是否有任何方法可以使用libTIFF将字节数组作为一个完整的数据块(许多标记)写入.tiff文件 据我所知,.tiff文件由于随机数据块(IFD)位置而无法流化。但是,我可以假设,该块中的数据是按预定义顺序写入的。我试图完成的是将整个exif属性字节块从jpeg文件写入tiff中的“exif IFD” 那么,有没有像TIFFSetField()这样的函数可以填充整个数据块(IFD)?显然没有。委员会: TIFF规范要求除8字节以外的所有信息 头可以放在文件中的任何位置。特别是 在 图像

我想知道,是否有任何方法可以使用libTIFF将字节数组作为一个完整的数据块(许多标记)写入.tiff文件

据我所知,.tiff文件由于随机数据块(IFD)位置而无法流化。但是,我可以假设,该块中的数据是按预定义顺序写入的。我试图完成的是将整个exif属性字节块从jpeg文件写入tiff中的“exif IFD”

那么,有没有像TIFFSetField()这样的函数可以填充整个数据块(IFD)?

显然没有。委员会:

TIFF规范要求除8字节以外的所有信息 头可以放在文件中的任何位置。特别是 在 图像数据本身。因此,TIFF本质上不适用于 通过面向流的机制(如UNIX管道)传递。 要求以特定格式将数据组织在文件中的软件 顺序(例如,图像数据之前的目录信息)不正确 正确支持TIFF。libtiff不提供任何控制机制 在文件中放置数据;通常写入图像数据 在目录信息之前


您可以编写自己的TIFF数据块,在该块中,数据以“私有”格式格式化(如果内存可用,则为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格式的“黑客攻击”可能会给您留下由您现有的软件工具高效编写和正确处理的文件,但不会与其他地方的其他工具兼容——这可能会在您完成数周的工作后发现。

谢谢您的回答,我想我最终会对所有exif标记多次使用TIFFSetField()函数。在我的情况下,破解tiff不是一个选项,因为文件必须由Photoshop正确读取,其中包含所有exif标记。而且我仅限于编程机制(无法使用任何工具)。我试图通过按原样将整个字节块写入EXIF IFD来获得性能(因为我已经有了一个字节块)。不幸的是,事实证明它在这种情况下不起作用。我认为Photoshop优先读取自己的XMP格式的单个字段。今晚晚些时候我会收到我的笔记,但你可能想调查一下。