0

我的照片编辑器搞砸了我许多照片的标签。我将此作为开始熟悉 Python 并编写脚本来清理标签的最后一击。我发现 pyexiv2 可能会派上用场,我尝试基本上遵循教程(http://tilloy.net/dev/pyexiv2/tutorial.html)。

我正在尝试做的事情:

  • 从 XMP 文件中解析原始数据(注意:我使用 sidecar 文件而不是直接将元数据写入照片文件)。
  • 从 Xmp.dc.subject 中读取原始标签(并将它们打印到标准输出以进行调试)
  • 将标签更改为新值(并用于调试打印新值)
  • 将新数据写回 XMP 文件

在我在编辑器中检查 XMP 文件之前,情况看起来相当不错。更改的值只是没有显示出来。但是,XMP 文件会获得一个新的时间戳,如果我将 XMP 文件设为只读,则会收到一条错误消息。所以似乎有些东西被写入文件。只是数据不正确。

这是一个显示我的问题的最小脚本:

import pyexiv2

key= 'Xmp.dc.subject'
metadata = pyexiv2.ImageMetadata('test.xmp')
metadata.read()

print metadata[key]
metadata[key] = ['NewTag']
print metadata[key]
metadata.write()

它的输出是:

<Xmp.dc.subject [bag Text] = ['OldTag']>
<Xmp.dc.subject [bag Text] = ['NewTag']>
Script terminated.

但是 XMP 文件的相关部分仍然是这样的:

<dc:subject>
  <rdf:Bag>
    <rdf:li>OldTag</rdf:li>
  </rdf:Bag>
</dc:subject>

那么我必须做什么才能将更改的元数据写入 XMP 文件?

请注意,我是 Python 的完全初学者(但不是编程的初学者),所以这个问题可能是由我不知道的一些琐碎的事情引起的。我在 Debian Linux 上运行 Python 2.7.6。

4

1 回答 1

0

关于pyexiv2.metadata.ImageMetadata的 API 文档说:

嵌入图像中的所有元数据的容器。

它为使用 Python 类型处理嵌入在图像文件(如 JPEG 和 TIFF 文件)中的 EXIF、IPTC 和 XMP 元数据提供了方便的方法。它还提供对嵌入图像中的预览的访问。

看起来可能不支持写入边车文件。

于 2014-02-01T11:26:07.640 回答