Java 多部分tiff和EXIF元数据

Java 多部分tiff和EXIF元数据,java,file-format,exif,image-formats,Java,File Format,Exif,Image Formats,在tif格式中,添加EXIF元数据时,将创建一个新的IFD(tif目录),并将EXIF元数据存储为字段。因此,使用单个图像和exif数据解析tif文件时很容易。但您可以获得多部分TIFF,其中tif可以包含多个图像,问题是每个图像是否都有EXIF数据? 这是否会为每个图片元数据创建新的IFD 那么国际单项体育联合会的安排是什么 tif规范不涉及任何细节,我知道当单个图像tif文件包含EXIF数据时,EXIF数据有一个偏移字段,因此我可以跳转到该位置并自己进行解析,但是Java Sanselan库

在tif格式中,添加EXIF元数据时,将创建一个新的IFD(tif目录),并将EXIF元数据存储为字段。因此,使用单个图像和exif数据解析tif文件时很容易。但您可以获得多部分TIFF,其中tif可以包含多个图像,问题是每个图像是否都有EXIF数据? 这是否会为每个图片元数据创建新的IFD

那么国际单项体育联合会的安排是什么

tif规范不涉及任何细节,我知道当单个图像tif文件包含EXIF数据时,EXIF数据有一个偏移字段,因此我可以跳转到该位置并自己进行解析,但是Java Sanselan库让我可以轻松访问EXIF IFD和字段,但如果可以访问多个EXIF IFD的话(每个图像一个)然后库不会告诉我数据属于哪个图像

如果在一个多部分tif文件中不能有超过1个EXIF IFD,那么它将是微不足道的!换句话说: 我需要手动解析exif数据吗?因为我只需要在您可以将exif数据附加到多部分tif中的每个图像时才需要这样做


或者有人知道一个好的Linux应用程序,它允许我将EXIF数据添加到tif文件中,这样我就可以自己找到它了吗?

你可能想看看。它对我使用它的内容非常有效(JPEG),但我从未将其用于包含多个图像的TIFF文件。另外,请查看ImageMagick,他有大量有用的工具。

要回答您的问题:

这些图片中的每一张都有EXIF数据吗?这会为每一张图片元数据创建一个新的IFD吗?那么IFD的排列是什么呢

是的,每个图像都可以有自己的EXIF数据。每个图像都与自己的IFD相关,每个EXIF数据都是相应图像IFD中的子IFD

但是Java Sanselan库让我可以轻松访问EXIF IFD和字段,但是如果可以访问多个EXIF IFD(每个图像一个),那么库不会告诉我数据属于哪个图像

我从未使用过Sanselan及其后续的Apache Imaging,因此我猜这里可能会发生两件事:首先,如果您实际上可以将EXIF插入到多页TIFF中,Sanselan可能会默认选择多页TIFF的第一页;或者可能会有一个参数,您可以使用类似
setWorkingPage(int page)的方法在某处设置该参数
这就是我使用“”Java图像库所做的

以下是需要添加EXIF元数据时TIFF图像内部发生的情况的详细信息:

对于单页TIFF,有一个“main”IFD,指定其中包含的有关图像的所有信息。当需要EXIF数据时,有一个称为“EXIF\u SUB\u IFD”的特殊标记添加到主IFD。此标记的值是有关图像流开始的偏移地址。现在,如果我们跳转到偏移指定的地址,我们将实际找到一个与包含所有EXIF数据的“主”IFD结构完全相同的“子”IFD

上述结构完全类似于目录树,因此命名为IFD。然而,这里有一个细微的区别:主IFD应该包含实际的图像数据,但EXIF子IFD不包含。事实上,还有一个GPS子IFD,它与EXIF子IFD平行,并且具有相同的结构。一个有趣的例子g是EXIF的数据可以存储在TIFF图像流中的任何位置(只要它不破坏目录和图像数据的其他部分)

现在是多页TIFF。页面可以关联也可以不关联。每个页面IFD的最后4个字节指向另一个IFD的偏移量。它们有时聚集在一起作为一个“单一”文档,可以来自扫描仪。也就是说,每个页面本身就是一个“单一”文档页面TIFF可以像单个页面TIFF一样包含自己的EXIF元数据