2

在 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 文件中,以便我自己弄清楚?

4

2 回答 2

1

要回答您的问题:

这些图像中的每一个都可以有EXIF数据吗?这会为每张图片元数据创建一个新的 IFD 吗?那么IFD的安排是怎样的呢?

是的,这些图像中的每一个都可以有自己的 EXIF 数据。每个图像都与它自己的 IFD 相关,每个 EXIF 数据是相应图像 IFD 内的一个 SUB-IFD。

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

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

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

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

上面提到的结构就像一个目录树,因此得名 IFD。然而这里有一个细微的区别:主 IFD 应该包含实际的图像数据,但 EXIF 子 IFD 不包含。实际上,还有一个GPS sub-IFD,它与EXIF sub-IFD并列,结构也一样。有趣的是,EXIF 的数据可以存储在 TIFF 图像流内的任何位置(只要它不破坏目录和图像数据的其他部分)。

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

于 2015-01-14T17:20:32.320 回答
0

您可能想查看ExifTool。它适用于我在 (JPEG) 上使用的内容,但我从未将它用于包含多个图像的 TIFF 文件。还要检查 ImageMagick,他有很多有用的工具。

于 2009-09-18T02:10:41.137 回答