3

我有许多 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 列出了一些本质上是整数元组的标签。但是,我不确定如何转换它。建议?

4

1 回答 1

2

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

这得看情况。

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

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

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

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,这可能比查找其他库更容易。)

于 2012-07-03T17:54:31.373 回答