为什么PIL(枕头)Image.save()会减小文件大小?

时间:2019-12-26 03:23:30

标签: python-imaging-library

我正在使用PIL旋转一些图像,并且我注意到输出文件要小得多,所以我尝试了一个测试:对文件不做任何操作,只保存exif信息(因为我知道默认情况下PIL图像会不保存exif信息)。这是我的测试代码:

    from PIL import Image
    test = Image.open('my_image_file.jpg')
    holdexif = test.info["exif"]
    test.save('my_saved_image_file.jpg',"jpeg",exif=holdexif)

执行上述操作时,my_saved_image_file.jpg比原始441 KBmy_image_file)小得多(1.83 MB)。 为什么?缺少什么?

当我查看两个文件的各种属性时,它们似乎是相同的。两者均为56英寸x 27英寸,均为每英寸72像素,均为4032 x 1960像素。 对于图像文件,我绝不是专家。根据我检查过的这些内容(图像的大小,分辨率和外观),这些文件在我看来是相同的。据我了解/了解,只有磁盘上的文件大小不同。我还要看什么?还有什么不同?

我还尝试了保存过程中的quality= kwarg:

    test.save('my_saved_image_file.jpg',"jpeg",exif=holdexif,quality=95)

给了我一个文件(1.73 MB),几乎和原始文件(1.83 MB)一样大。但是我不知道占较大尺寸的区别是什么(我不明白是什么使“质量”更好;图像对我来说看起来是一样的)。我试图了解两个文件之间的确切区别,以便做出决定。也许较小的尺寸对于我的目的来说是完全可以的。

1 个答案:

答案 0 :(得分:2)

正如Charanjit所指出的,答案在于压缩的数量(由quality方法的.save() kwarg控制)。更多的压缩意味着更小的文件和更少的“质量”。

关于“质量”,这意味着,尽管图像尺寸和图像分辨率可能相同,但图像中物体边缘的清晰度和颜色差异会降低(可能对眼睛不明显)。

这里对jpeg压缩有很好的讨论:Understanding JPEG Quality

还有另一个stackoverflow答案,该问题通过设置kwarg quality='keep'(而不是quality=N来解决尝试保存与原始质量相同的jpeg文件的问题:{ {1}}是1到100%之间的整数。