如何在Python Imaging Library中调整已调整大小的图像的质量?

big*_*mac 53 python python-imaging-library

我正在研究PIL并且需要知道在调整图像大小或缩略图像时是否可以调整图像质量.据我所知,默认质量设置为85.可以在调整大小期间调整此参数吗?

我目前正在使用以下代码:

image = Image.open(filename)
image.thumbnail((x, y), img.ANTIALIAS)
Run Code Online (Sandbox Code Playgroud)

ANTIALIAS参数可能提供最佳质量.我需要知道我们是否可以在质量选项上获得更多粒度.

Dom*_*ger 83

resize手动使用PIL的方法:

image = image.resize((x, y), Image.ANTIALIAS)  # LANCZOS as of Pillow 2.7
Run Code Online (Sandbox Code Playgroud)

其次是save方法

quality_val = 90
image.save(filename, 'JPEG', quality=quality_val)
Run Code Online (Sandbox Code Playgroud)

看一下models.pyPhotologue 的来源,看看他们是如何做到的.

  • +1为质量选项.但我不明白为什么`resize`会比`thumbnail`更好.有人可以详细说明吗? (3认同)
  • 从[文档](http://pillow.readthedocs.io/en/3.2.x/handbook/image-file-formats.html#jpeg):`quality`:图像质量,从1开始(最差) )到95(最好).默认值为75.应避免高于95的值; 100禁用部分JPEG压缩算法,并导致大文件几乎没有任何图像质量增益. (3认同)

jcd*_*yer 46

ANTIALIAS绝不能与"85"质量水平相媲美.ANTIALIAS参数告诉缩略图方法用于将像素从一种尺寸重新采样到另一种尺寸的算法.例如,如果我有一个3x3图像,如下所示:

2 2 2
2 0 2
2 2 2
Run Code Online (Sandbox Code Playgroud)

我将其调整为2x2,一个算法可能会给我:

2 2
2 2
Run Code Online (Sandbox Code Playgroud)

因为附近的大多数像素都是2,而另一个可能会给我:

1 1
1 1
Run Code Online (Sandbox Code Playgroud)

为了考虑到中间的0.但是你仍然没有开始处理压缩,直到你保存图像.也就是说,在缩略图中,您不是在处理质量等级,而是使用离散算法进行重采样.所以不,你不能在这里得到更好的控制.

如果保存为具有有损压缩的格式,则可以指定质量级别.


Den*_*din 12

不要混淆重新缩放和压缩.

为了获得最佳质量,您必须同时使用两者.请参阅以下代码:

from PIL import Image

image = Image.open(filename)
image.thumbnail((x, y), Image.ANTIALIAS)
image.save(filename, quality=100)
Run Code Online (Sandbox Code Playgroud)

通过这种方式,我的程序中有很好的拇指.

  • "图像质量,从1(最差)到95(最佳).默认值为75.应避免高于95的值; 100完全禁用JPEG量化阶段." http://www.pythonware.com/library/pil/handbook/format-jpeg.htm (19认同)