使用Python的iptcinfo3库更新JPEG的IPTC标题、注释、标签遇阻求助
解决iptcinfo3更新IPTC元数据的问题
问题排查与修正点
- 关键字字段格式错误:
keywords字段要求传入列表类型,而非字符串,直接赋值字符串会导致写入失效。 - 字段键名的准确性:虽然
object name这类别名可用,但直接使用IPTC标准的元组键(如(2, 0)对应标题)能避免名称匹配问题,更可靠。 - 文件覆盖的潜在问题:直接用原路径
save_as可能因文件占用导致写入失败,建议先写入临时文件再替换原文件。
修正后的代码
from PIL import Image import iptcinfo3 import os import shutil def update_image_metadata(jpeg_path, title, keywords): # 读取IPTC信息,force=True确保即使无元数据也创建新的 info = iptcinfo3.IPTCInfo(jpeg_path, force=True) # 使用标准IPTC元组键赋值,避免别名匹配问题 info[(2, 0)] = title # Object Name(标题) info[(2, 120)] = f"this is comments {title} vector image" # Caption/Abstract(注释) info[(2, 25)] = keywords if isinstance(keywords, list) else [keywords] # Keywords(标签,确保是列表) # 临时文件路径,避免原文件占用导致保存失败 temp_path = jpeg_path + ".tmp" info.save_as(temp_path) # 替换原文件 os.remove(jpeg_path) shutil.move(temp_path, jpeg_path) # 验证写入是否成功 verify_info = iptcinfo3.IPTCInfo(jpeg_path) print("验证结果:") print(f"标题: {verify_info.get((2, 0), '未设置')}") print(f"注释: {verify_info.get((2, 120), '未设置')}") print(f"标签: {verify_info.get((2, 25), '未设置')}") # 调用示例 update_image_metadata("test.jpg", "测试标题", ["标签1", "标签2"])
额外注意事项
- 确保图片文件没有被其他进程打开(比如图片查看器),否则会出现文件写入权限问题。
- 如果遇到编码错误,可在创建
IPTCInfo时指定编码参数,比如info = iptcinfo3.IPTCInfo(jpeg_path, force=True, encoding='utf-8')。
内容的提问来源于stack exchange,提问作者bymechul
相关产品推荐
相关产品推荐

