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

时间:2017-07-28 07:51:29

标签: python image compression jpeg pillow

我在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字段,我不会修改压缩或类似的东西。

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

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

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

一个较晚的答案,但是类似的帖子指出了一种解决方案here,该解决方案仅在文件中写入exif信息(使用piexif)。 结果,由于未执行任何压缩(通过“保存”命令),因此图像的内容不会更改。