在Python中跨平台编写XMP元数据

3

在使用Python向给定文件写入XMP元数据方面,最常见的方法似乎是使用Python XMP Toolkithttps://github.com/python-xmp-toolkit/python-xmp-toolkit

不幸的是,这个工具包似乎无法在Windows上工作(或者至少没有非常清晰的说明如何在Windows上让它工作)。是否有另一种方法可以使用Python向视频文件写入XMP元数据,在Windows和macOS上都可用?


1
嗨,我正在寻找一种在Windows上使用Python将XMP元数据写入图像文件的简单方法。你找到了任何解决方案吗? - undefined
3个回答

1

Pyexiv2可以读取EXIF和XMP数据,在Windows 10上运行良好。

from pyexiv2 import Image    

img_path=r'S1001679.jpg'
img=pyexiv2.Image(img_path)    
img_xmp=img.read_xmp()
img_xmp

返回:

{'Xmp.xmp.ModifyDate': '2021-02-11T20:21:06Z', 'Xmp.xmp.CreateDate':     '2021-02-11T20:21:06Z', 'Xmp.xmp.CreatorTool': '2d3686e931da45b78bd1cf1e858b1fe8',

========================================================================


1

0
根据 @icypy 的建议,pyexiv2 库非常适用于修改视频/图像文件中的 XMP 标签。
我强烈推荐在 GitHub 上找到的文档: https://github.com/LeoHsiao1/pyexiv2/blob/master/docs/Tutorial.md
以下是我使用它来更新 True 标签的简单示例:
#-----------------------------------------------------------
from pyexiv2 import Image

def print_xmp_tags_all(xmp):
    for key, value in xmp.items():
        print("{}: {}".format(key, value))

def print_xmp_tags_crop(xmp):
    print()
    print("Xmp.crs.HasCrop:     {}".format(xmp['Xmp.crs.HasCrop']))
    print("Xmp.crs.CropBottom:  {}".format(xmp['Xmp.crs.CropBottom']))
    print("Xmp.crs.CropLeft:    {}".format(xmp['Xmp.crs.CropLeft']))
    print("Xmp.crs.CropRight:   {}".format(xmp['Xmp.crs.CropRight']))
    print("Xmp.crs.CropTop:     {}".format(xmp['Xmp.crs.CropTop']))

#-----------------------------------------------------------
img_path = 'C:/Users/USER/Desktop/MY_IMAGE_0001.jpg'
img = Image(img_path)
# Extract XMP-metadata from file:
xmp = img.read_xmp()
print_xmp_tags_crop(xmp)
# Preparing dictionary containing only those tags we want do update:
new_xmp = {
    'Xmp.crs.HasCrop':      False,
    'Xmp.crs.CropBottom':   0,
    'Xmp.crs.CropLeft':     0,
    'Xmp.crs.CropRight':    0,
    'Xmp.crs.CropTop':      0
}
# Update XMP-tags within file:
img.modify_xmp(new_xmp)
# Free resources:
img.close()

#-----------------------------------------------------------
# Check if xmp-update was successfull:
img = Image(img_path)
xmp = img.read_xmp()
print_xmp_tags_crop(xmp)
img.close()

相应的输出:

C:\Users\USER\Desktop>python XMP_flush_attribute_HasCrop.py

Xmp.crs.HasCrop:     True
Xmp.crs.CropBottom:  1
Xmp.crs.CropLeft:    0.056000
Xmp.crs.CropRight:   0.944000
Xmp.crs.CropTop:     0

Xmp.crs.HasCrop:     False
Xmp.crs.CropBottom:  0
Xmp.crs.CropLeft:    0
Xmp.crs.CropRight:   0
Xmp.crs.CropTop:     0

HTH

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接