从Tiff图像中获取描述/关键字?

时间:2012-07-03 16:06:05

标签: python tiff exif iptc

我有许多TIFF文件,其中包含说明和“关键字”(OS X在文件检查器中对它们进行了术语)。但是,我很难从图像中收集这些元数据。

我已尝试使用tifffile.pyPIL的exif命令和IPTCInfo,而tifffile.py 获取描述我仍然可以'似乎使用任何这些库来解析文件中的“关键字”。

是否使用与TIFF不同的“规范”存储关键字而不是JPEG?解析这些关键字的最佳方法是什么?

修改

abarnert的评论之后,我在文本编辑器中打开了一个TIFF文件,发现包含“关键字”的XML数据。下面的代码段:

...
<rdf:Description rdf:about=""
xmlns:dc="http://purl.org/dc/elements/1.1/">
<dc:description>
<rdf:Alt>
 <rdf:li xml:lang="x-default">OLYMPUS DIGITAL CAMERA</rdf:li>
</rdf:Alt>
</dc:description>
<dc:format>image/tiff</dc:format>
<dc:subject>
<rdf:Bag>
 <rdf:li>Foo</rdf:li>
 <rdf:li>Bar</rdf:li>
 <rdf:li>A long keyword</rdf:li>
</rdf:Bag>
</dc:subject>
</rdf:Description>
...

看起来好像可以存储为二进制表示; tifffile.py列出了许多基本上是整数元组的标签。但是,我不知道如何转换它。建议?

1 个答案:

答案 0 :(得分:2)

  

是否使用与TIFF不同的“规范”来存储关键字?

嗯,这取决于。

TIFF容器只有一组非常有限的元数据标签,并且没有任何指定任意关键字的方法。

JPEG根本不是容器类型;它是一个图像压缩编解码器,可用于各种不同的容器,包括TIFF。但通常当你说“JPEG文件”是指JFIF,它是JPEG组指定的容器格式之一,而且像TIFF一样,JFIF的元数据标签集非常有限。

Exif是另一种容器格式,就结构而言与TIFF相同,但它定义了新的标签,明确表示元数据,这意味着您可以将TIFF简单地包装为Exif并且它仍然是合法的TIFF,并且有点偷偷摸摸你还可以用一种不太合法的JFIF包装JFIF作为Exif,但几乎所有软件都接受它。

Exif是向JFIF添加元数据的唯一常用方法(不计算DCF,这与Exif基本相同),但它是向TIFF添加元数据的多种不同方式之一。 IPTC是另一个,XMP,OME和许多其他人也是如此。

因此,一些TIFF文件使用与JFIF-wrapped-in-Exif相同的规范存储“关键字”,但其他文件没有。

  

解析这些关键字的最佳方法是什么?

嗯,你需要知道它们存储的格式。

毋庸置疑,PIL的exif命令只支持Exif,IPTCInfo只支持IPTC,而tifffile主要支持......好吧,各种不同的东西。

我相信tifffile.py可以存储未知标记类型是原始二进制数据,您可以迭代并查看您缺少的内容。这将至少涵盖使用TIFF容器结构的所有扩展。如果你没有在那里找到关键词,那么......至少可以排除许多常见的格式。

无论如何,一旦你知道你正在寻找哪种格式,你就可以寻找一个可以处理它的库。 (或者,如果它是基于XML的那个之一,只需使用tifffile读取标记为二进制数据,然后将其解析为UTF-8 XML,这可能比查找不同的库更容易。)