Python PIL (Pillow) 在修改 exif 数据后调整了我的图片大小

Python PIL (Pillow) resizes my pictures after modifying exif data

我在Python中做了一个小脚本,它可以根据文件名设置我的旧Whatsapp图片的exif数据。

我使用 piexif 和 PIL (Pillow) 包。

import piexif
from PIL import Image
from collections import defaultdict

img = Image.open(fname)

try:
    exif_dict = piexif.load(img.info["exif"])
except KeyError:
    exif_dict = defaultdict(dict)

exif_dict['Exif'][piexif.ExifIFD.DateTimeOriginal] = exiftime(date)
exif_dict['Exif'][piexif.ExifIFD.DateTimeDigitized] = exiftime(date)

exif_bytes = piexif.dump(exif_dict)
img.save('%s' % fname, "jpeg", exif=exif_bytes)

exiftime() 函数仅用于格式化日期。

但是,脚本正在设置一些 exif 字段,我不会修改压缩或类似的东西。

我的问题是,在 运行 那个脚本之后,图片变小了。 我用一些示例图像测试了这个脚本,例如使用尼康 D5300 拍摄的分辨率为 6000x4000 的照片。原始文件大约有 12Mb,脚本后只有 4Mb。

脚本会导致图片质量下降,还是只是更好的压缩?

根据文档,Pillow 的 .save 会以默认的 75% 质量自动压缩。您可以将其提高到 100%(添加质量 = 100),这将最大限度地减少压缩,看起来它会完全跳过一些压缩组件,但 Pillow 显然没有完全跳过压缩的能力。很少有包这样做,而且我不知道有任何 Python 模块形式的包。请注意,文档说不要将质量提高到 95 以上,我可以证明这样做会输出更大的文件。很奇怪。

有点迟到的答案,但类似的 post 指出了一个解决方案 只在文件中写入 exif 信息(使用 piexif)。 结果图像的内容没有改变,因为没有压缩(通过 "save" 命令)完成。