【问题标题】:Writing modified subject data to XMP file fails (using pyexiv2)将修改后的主题数据写入 XMP 文件失败(使用 pyexiv2)
【发布时间】:2014-01-30 20:28:38
【问题描述】:

我的照片编辑器搞砸了我许多照片的标签。我将此作为开始熟悉 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。

【问题讨论】:

    标签: python xmp pyexiv2


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 看来,这个答案是正确的。我检查了 exiv2 的文档(pyexiv2 使用了 AFAIK),写入 XMP 文件被列为“支持”,但即使直接从命令 shell 使用 exiv2,我仍然无法将 XMP 数据写入 sidecar 文件。将(相同的 xMP)数据写入 JPEG 文件效果很好......
    猜你喜欢
    • 2023-03-06
    • 2022-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-08
    • 2019-07-30
    相关资源
    最近更新 更多