【问题标题】:Why does PIL (pillow) Image.save() reduce file size?为什么 PIL (pillow) Image.save() 会减小文件大小?
【发布时间】:2019-12-26 20:09:59
【问题描述】:

我正在使用 PIL 旋转一些图像,我注意到输出文件要小得多,所以我尝试了一个测试:对文件不做任何事情,除了保存 exif 信息(因为我知道 PIL Image 默认情况下会不保存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 KB) 比原来的 my_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) 一样大。但我不知道更大尺寸有什么不同(我不明白是什么让“质量”更好;图像对我来说看起来一样)。我试图了解这两个文件之间到底有什么不同,以便我做出决定。也许较小的尺寸对我来说完全没问题。

【问题讨论】:

  • PILs IMAGE 正在进行压缩。你可以在这里查看github.com/python-pillow/Pillow/blob/master/src/PIL/…
  • 谢谢。压缩是否会导致实际质量损失?在我看来不是。但正如我所提到的,对于质量,我只知道在屏幕上看我眼睛的大小、分辨率和外观。压缩过程中是否丢失了任何东西?如果是这样,那是什么。谢谢。
  • diffchecker.com/image-diff 让我们试试看这里。在difference 标签中,
  • 我正在阅读代码,试图找出它如何从文件中解码图像并将其作为文件放回。
  • 很好,祝你有美好的一天!!

标签: python-imaging-library


【解决方案1】:

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

关于“质量”,这意味着,虽然图像大小和图像分辨率可能相同,但图像内对象边缘的清晰度和颜色差异会降低(可能肉眼不明显)通过压缩。

这里有一个很好的关于 jpeg 压缩的讨论:Understanding JPEG Quality

还有另一个 stackoverflow 答案解决了尝试以与原始文件相同的质量保存 jpeg 文件的问题:https://stackoverflow.com/a/4355281/1639359 by setting kwarg quality='keep'(而不是quality=N,其中N 是介于1 和 100 %)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-05
    • 2016-05-16
    • 1970-01-01
    • 2014-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多