【问题标题】:Why is the quality of JPEG images produced by PIL so poor?为什么 PIL 生成的 JPEG 图像质量那么差?
【发布时间】:2013-10-18 16:14:35
【问题描述】:

使用 PIL (1.1.7) 创建的 JPEG 图像质量很差。这是一个例子:

输入:https://s23.postimg.cc/8bks3x5p7/cover_1.jpg

输出:https://s23.postimg.cc/68ey9zva3/cover_2.jpg

输出图像是使用以下代码创建的:

from PIL import Image
im = Image.open('/path/to/cover_1.jpg')
im.save('/path/to/cover_2.jpg', format='JPEG', quality=100)

红色的文字看起来很糟糕。使用 GIMP 或 Photoshop 保存图像甚至不会接近 PIL 创建的质量差。 有人知道为什么会发生这种情况以及如何解决吗?

【问题讨论】:

  • 您正在保存 JPEG 的 JPEG。你丢失了两次信息。您确定 GIMP 和 Photoshop 实际上是在再次处理 JPEG,而不仅仅是按原样保存(因为程序将其识别为 JPEG,因此不对其执行任何操作)?
  • 感谢您的快速回复。我知道我丢失了两次信息这一事实。这只是一个非常简单的例子。在生产中,我也在调整图像的大小:)。此外,如果我在 GIMP 或 Photoshop 中调整图像大小,生成的图像看起来更清晰。两个人在两张照片中看起来几乎一样,但红色的文字看起来却截然不同。
  • 我不怀疑它从 GIMP / Photoshop 中看起来更清晰。但它与输入图像有任何不同吗?从 GIMP / Photoshop 将其保存为 JPEG 后,有什么变化吗?如果答案是否定的,那么 PIL 可能看起来“很糟糕”,因为它实际上是在应用 JPEG 压缩,而另一个不是。看看我在说什么?
  • 您对我答案的编辑看起来非常熟悉,所以我进行了搜索 - 这不是我第一次回答这个问题,并且有一条包含相同信息的评论。 stackoverflow.com/questions/15481062/…
  • @MarkRansom 这就是我从那里得到解决方案的地方:)

标签: python python-imaging-library


【解决方案1】:

JPEG 质量有两个部分。第一个是quality 设置,您已将其设置为可能的最高值。

JPEG 也使用chroma subsampling,假设色调变化不如亮度变化重要,并且一些信息可以安全地丢弃。不幸的是,在要求苛刻的应用程序中,这并不总是正确的,您最容易在红色边缘注意到这一点。 PIL 没有公开记录的设置来控制这方面。

Pascal Beyeler 编辑:

我刚刚找到了一个禁用子采样的选项。您可以在保存图像时设置subsampling=0,图像看起来更清晰!感谢您的帮助标记!

im.save('/path/to/cover-2.jpg', format='JPEG', subsampling=0, quality=100)

再次编辑:

subsampling 选项终于记录在案了,但我不知道这种情况持续了多久。看起来您可以选择整数参数或字符串;我还是推荐0如上图。

https://pillow.readthedocs.io/en/stable/handbook/image-file-formats.html#jpeg

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-06-18
    • 1970-01-01
    • 1970-01-01
    • 2015-12-18
    • 1970-01-01
    • 2011-08-18
    • 2018-12-04
    • 2020-01-22
    相关资源
    最近更新 更多