如何用Python修改JPG图片的元数据标签?已尝试pyexif、PIL未果
Python修改图片元数据标签的解决方案
针对你遇到的问题,推荐以下几个实用的Python库来修改图片元数据,覆盖你需要的各类标签:
方案1:使用pyexiv2(全面支持多类元数据)
pyexiv2是专门处理图片元数据的工具,支持读写Exif、IPTC、XMP等主流标准,能修改Windows属性里的作者、标题、关键字等标签。
安装
pip install pyexiv2
示例代码
import pyexiv2 # 打开目标图片 img = pyexiv2.Image("your_image.jpg") # (可选)查看当前元数据 current_exif = img.read_exif() print("当前Exif数据:", current_exif) # 修改Exif类标签(作者、描述) img.modify_exif({ "Exif.Image.Artist": "Diego Gonzalez", "Exif.Image.ImageDescription": "自定义图片描述" }) # 修改IPTC类标签(标题、关键字) img.modify_iptc({ "Iptc.Application2.ObjectName": "图片标题", "Iptc.Application2.Keywords": ["风景", "摄影"] }) # 修改XMP类标签(更丰富的自定义字段) img.modify_xmp({ "Xmp.dc.title": "XMP格式标题", "Xmp.dc.creator": ["Diego Gonzalez"] }) # 保存修改并关闭 img.close()
方案2:使用piexif(轻量Exif处理)
如果只需要处理基础Exif标签,piexif是轻量选择,无需额外依赖,可配合PIL使用。
安装
pip install piexif
示例代码
import piexif from PIL import Image # 打开图片并读取现有Exif数据 img = Image.open("your_image.jpg") exif_data = piexif.load(img.info.get("exif", b"")) # 修改Exif标签 exif_data["0th"][piexif.ImageIFD.Artist] = "Diego Gonzalez" exif_data["0th"][piexif.ImageIFD.ImageDescription] = "自定义图片描述" # 转换为字节并保存修改后的图片 exif_bytes = piexif.dump(exif_data) img.save("modified_image.jpg", exif=exif_bytes)
方案3:使用pyexiftool(适配复杂元数据场景)
如果需要修改一些特殊的系统属性标签,可借助exiftool工具(需先安装对应系统版本,确保命令行可运行),通过pyexiftool调用它。
安装Python包装器
pip install pyexiftool
示例代码
from exiftool import ExifToolHelper with ExifToolHelper() as et: # 单张或批量修改元数据 et.set_tags( "your_image.jpg", tags={ "Author": "Diego Gonzalez", "Title": "自定义标题", "Keywords": ["Python", "元数据处理"] } )
注意事项
- 不同图片格式支持的元数据标准不同:JPG全面支持Exif/IPTC/XMP,PNG主要支持XMP,部分小众格式可能有兼容性限制。
- 你之前用PIL失败,是因为PIL仅支持基础Exif读取,大部分扩展标签需要用专门的元数据库处理。
内容的提问来源于stack exchange,提问作者Diego Gonzalez
相关产品推荐
相关产品推荐

