如何在Python Imaging Library中调整缩放图像的质量?

68 投票
5 回答
90492 浏览
提问于 2025-04-15 14:13

我正在使用PIL这个库,想知道在调整图片大小或者制作缩略图的时候,图片的质量是否可以调整。我了解到默认的质量设置是85。请问在调整大小的时候,这个参数可以修改吗?

我现在使用的代码如下:

image = Image.open(filename)
image.thumbnail((x, y), img.ANTIALIAS)

这个ANTIALIAS参数应该能提供最好的质量。我想知道我们是否可以更细致地调整质量选项。

5 个回答

16

不要把重新缩放和压缩搞混了。

为了获得最佳质量,你需要同时使用这两种方法。看看下面的代码:

from PIL import Image

image = Image.open(filename)
image.thumbnail((x, y), Image.ANTIALIAS)
image.save(filename, quality=100)

通过这种方式,我在我的程序中得到了非常精细的缩略图。

48

ANTIALIAS这个参数和“85”这个质量等级是完全不同的。ANTIALIAS告诉缩略图的方法应该用什么算法来调整像素的大小。举个例子,如果我有一张3x3的图片,看起来是这样的:

2 2 2
2 0 2
2 2 2

然后我把它缩小到2x2,可能会有一种算法给我这样的结果:

2 2
2 2

因为周围大部分的像素都是2,而另一种算法可能会给我这样的结果:

1 1
1 1

这样做是为了考虑到中间的0。但是你还没有开始处理压缩,直到你保存图片的时候才会处理。也就是说,在缩略图的处理过程中,你并不是在调整质量的细微差别,而是在使用不同的算法来重新采样。所以在这里,你无法获得更精细的控制。

如果你保存为一种有损压缩的格式,那才是指定质量等级的地方。

109

手动使用PIL的 resize 方法:

image = image.resize((x, y), Image.ANTIALIAS)  # LANCZOS as of Pillow 2.7

然后使用保存方法

quality_val = 90
image.save(filename, 'JPEG', quality=quality_val)

可以看看models.py 文件,了解Photologue是怎么实现的。

撰写回答