You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何移除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

火山引擎 最新活动