如何移除Pillow处理JPG图片时保留的CREATOR注释?
如何移除Pillow处理JPG图片时保留的CREATOR注释?
我太懂你这种在版本库管理图片的烦恼了——明明只是调整了尺寸,结果因为一条注释导致文件哈希变化,平白多出无意义的版本差异!结合你后来的更新(原图片本身就带有CREATOR: gd-jpeg...这类注释),问题本质是Pillow在处理后保存图片时,默认会保留原图片里的元数据(包括这个CREATOR注释),咱们可以通过下面两种方法解决:
方法一:直接清除所有EXIF元数据(简单粗暴)
如果你不需要保留任何EXIF信息(比如拍摄时间、相机参数这些),可以在保存图片时直接指定exif=None,这样所有元数据都会被清空,自然也包括CREATOR注释:
import PIL img_original = PIL.Image.open("original_image.jpg") new_img = img_original.resize( (200, 200), # width, height PIL.Image.LANCZOS ) # 保存时传入exif=None,清除所有元数据 new_img.save("new_image.jpg", exif=None)
方法二:精准移除CREATOR注释(保留其他EXIF)
如果你还想保留原图片的其他有用EXIF数据,只删掉这个CREATOR注释,可以先提取并处理原图片的元数据,再传入保存方法:
import PIL from PIL.ExifTags import TAGS img_original = PIL.Image.open("original_image.jpg") new_img = img_original.resize( (200, 200), PIL.Image.LANCZOS ) # 提取原图片的EXIF数据并处理 exif_data = img_original.getexif() if exif_data: # 遍历EXIF标签,找到Comment字段并删除 for tag_id, value in list(exif_data.items()): tag_name = TAGS.get(tag_id, tag_id) if tag_name == 'Comment' and value.startswith('CREATOR: gd-jpeg'): del exif_data[tag_id] # 同时处理JPEG的独立注释字段(有些CREATOR注释存在这里) comment = img_original.info.get('comment') if comment and comment.startswith(b'CREATOR: gd-jpeg'): # 保存时通过info传入空的comment,覆盖原注释 new_img.save("new_image.jpg", exif=exif_data, info={'comment': b''}) else: new_img.save("new_image.jpg", exif=exif_data) else: # 原图片无EXIF数据,直接保存即可 new_img.save("new_image.jpg")
这里要注意:有些JPEG的CREATOR注释可能存在于独立的comment信息段(不是EXIF的Comment标签),所以咱们要同时处理这两个地方,确保彻底清除。
备注:内容来源于stack exchange,提问作者mulllhausen




