在tif格式中,当您添加EXIF元数据时,它将创建一个新的IFD(tif目录)并将exif元数据存储为字段。因此,在分析带有单个图像和exif数据的tif文件时很容易。但是您会得到多部分的tiff,其中tif可以包含一个以上的图像,问题是每个图像都可以包含EXIF数据吗?
这会为每个图片元数据创建一个新的IFD吗?
那么,IFD的安排是什么?
tif规范没有涉及任何细节,我知道当单个图像tif文件包含EXIF数据时,EXIF数据会有一个偏移量字段,因此我可以跳到该位置自己进行解析,但是Java Sanselan库使我可以轻松访问EXIF IFD和字段,但是如果可以使用多个EXIF IFD(每个图像一个),则库不会告诉我数据属于哪个图像。
如果在一个多部分的tif文件中不能包含超过1个EXIF IFD,那将是微不足道的!换一种说法:
我需要手动解析exif数据吗?因为只要将EXIF数据附加到多部分tif中的每个图像上,我就需要这样做。
还是没有人知道一个好的Linux应用程序,它允许我将EXIF数据添加到tif文件中,以便我自己解决问题?
最佳答案
要回答您的问题:
每个图像都可以具有EXIF数据吗?这会为每个图片元数据创建一个新的IFD吗?那么,IFD的安排是什么?
是的,每个图像都可以拥有自己的EXIF数据。每个图像与其自己的IFD相关,每个EXIF数据是相应图像IFD内部的SUB-IFD。
但是Java Sanselan库使我可以轻松访问EXIF IFD和字段,但是如果可以使用多个EXIF IFD(每个图像一个),则该库不会告诉我数据属于哪个图像。
我从来没有使用过Sanselan,而是它的继任者Apache Imaging,所以我想这里可能发生两件事:首先,如果您实际上可以在多页TIFF中插入EXIF,则Sanselan可能默认为多页TIFF选择第一页;或者可能有一个参数,您可以使用setWorkingPage(int page)
之类的方法在某个地方设置该参数,这就是我使用“ icafe” Java图像库所做的。
以下是有关需要添加EXIF元数据时TIFF图像内发生的情况的详细信息:
对于单页TIFF,有一个“主” IFD,用于指定有关其中包含的图像的所有信息。当需要EXIF数据时,将一个称为“ EXIF_SUB_IFD”的特殊标签添加到主IFD。该标签的值是关于图像流开始的偏移地址。现在,如果我们跳转到偏移量指定的地址,则实际上将找到一个“子” IFD,其结构与包含所有EXIF数据的“主” IFD完全相同。
上面提到的结构完全类似于目录树,因此命名为IFD。但是,这里有一个细微的差别:主IFD应该包含实际的图像数据,而EXIF子IFD不包含。实际上,还有一个GPS子IFD,它与EXIF子IFD并联,并且结构相同。有趣的是EXIF的数据可以存储在TIFF图像流内的任何位置(只要它不会破坏目录和图像数据的其他部分)。
现在进入多页TIFF。页面可以相关或不相关。每页IFD的最后4个字节指向另一个IFD的偏移量。他们有时会聚在一起,充当可能来自扫描仪的“单个”文档。也就是说,每个页面本身就是一个“单个”页面TIFF,其中可能包含它自己的EXIF元数据,就像一个页面TIFF一样。