You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 06:23:33