多部分tiff和EXIF元数据

时间:2009-09-18 01:39:46

标签: java file-format exif image-formats

在tif格式中,当您添加EXIF元数据时,它会创建一个新的IFD(tif-direcory)并将exif元数据存储为字段。因此,在使用单个图像解析tif文件时,exif数据很容易。但是你可以获得多部分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文件中,以便我可以自己解决这个问题?

2 个答案:

答案 0 :(得分: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”的特殊标记。该标签的值是关于图像流开始的偏移地址。现在,如果我们跳转到偏移量指定的地址,我们实际上会找到一个“子”IFD,其结构与包含所有EXIF数据的“主”IFD完全相同。

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

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

答案 1 :(得分:0)

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