如何使用Pillow读取ExifTool设置的XMP标签?
读取图片中的XMP标签问题
你用ExifTool写入的XMP:PreservedFileName和XMP:Title属于XMP元数据块,而当前Pillow代码只读取了Exif IFD(图像文件目录)里的内容,这就是读不到目标标签的原因。以下是两种可行的解决方法:
方法一:使用Pillow自带的getxmp()方法(Pillow 9.1.0+支持)
Pillow从9.1.0版本开始提供了直接读取XMP数据的接口,代码如下:
from PIL import Image # 打开图片并读取XMP数据 with Image.open('P1050122.jpg') as img: xmp_dict = img.getxmp() # 提取目标标签 preserved_filename = xmp_dict.get('PreservedFileName') title = xmp_dict.get('Title') print(f"原始文件名(PreservedFileName):{preserved_filename}") print(f"标题(Title):{title}")
如果读取不到,可打印xmp_dict查看完整键名——部分XMP标签可能带有命名空间前缀(比如dc:Title),需要对应调整键名。
方法二:使用pyexiftool直接调用ExifTool解析
如果你的Pillow版本较低,或者需要更全面的元数据解析能力,可以用ExifTool的Python绑定库pyexiftool:
- 先安装库:
pip install pyexiftool
- 编写读取代码:
import exiftool # 调用ExifTool读取元数据 with exiftool.ExifToolHelper() as et: # 获取单张图片的元数据(返回列表,取第一个元素) metadata = et.get_metadata('P1050122.jpg')[0] # 提取XMP标签 preserved_filename = metadata.get('XMP:PreservedFileName') title = metadata.get('XMP:Title') print(f"原始文件名(PreservedFileName):{preserved_filename}") print(f"标题(Title):{title}")
内容的提问来源于stack exchange,提问作者liv913
相关产品推荐
相关产品推荐

