Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Python图像库中调整调整大小的图像的质量?_Python_Python Imaging Library - Fatal编程技术网

如何在Python图像库中调整调整大小的图像的质量?

如何在Python图像库中调整调整大小的图像的质量?,python,python-imaging-library,Python,Python Imaging Library,我正在处理PIL,需要知道在调整图像大小或用拇指钉出图像时是否可以调整图像质量。据我所知,默认质量设置为85。在调整大小时可以调整此参数吗 我目前正在使用以下代码: image = Image.open(filename) image.thumbnail((x, y), img.ANTIALIAS) from PIL import Image image = Image.open(filename) image.thumbnail((x, y), Image.ANTIALIAS) image

我正在处理PIL,需要知道在调整图像大小或用拇指钉出图像时是否可以调整图像质量。据我所知,默认质量设置为85。在调整大小时可以调整此参数吗

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

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

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

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

使用PIL的
手动调整大小
方法:

image = image.resize((x, y), Image.ANTIALIAS)  # LANCZOS as of Pillow 2.7
然后是save方法

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

看看from Photologue的源代码,看看他们是如何做到的。

ANTIALIAS根本无法与“85”质量级别相比。ANTIALIAS参数告诉缩略图方法使用什么算法将像素从一种大小重新采样到另一种大小。例如,如果我有一个3x3的图像,看起来像这样:

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

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

2 2
2 2
1 1
1 1
<>为了考虑中间的0。但是您仍然没有开始处理压缩,并且在保存图像之前不会处理压缩。这就是说,在缩略图中,您并没有处理质量的分级,而是处理用于重新采样的离散算法。所以不,你不能在这里得到更好的控制


如果保存为有损压缩格式,则需要指定质量级别。

不要混淆缩放和压缩

为了获得最佳质量,您必须同时使用这两种方法。请参阅以下代码:

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

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

通过这种方式,我在程序中拥有非常好的拇指。

实现更好质量的一种方法是分两步进行缩小。例如,如果你的原始图像是1200 X1200,并且你需要将它调整到64×64像素,那么在第一步上将它缩小到这两个大小中间的某个地方:


1200x1200->600x600->64x64

防锯齿n设置质量,如90

   img = img.resize((128,128),Image.ANTIALIAS)
   img.save(os.path.join(output_dir+'/'+x,newfile),"JPEG",quality=90)

谢谢,这正是我想要的。。。只是一个补充:quality选项是一个kwarg,因此必须作为quality=quality传递。另外请注意,如果原始图片是
索引的
,在大多数情况下,如果在调用
.resize()
+1质量选项之前将其转换为
RGB
RGBA
,则输出的质量会提高。但是我不明白为什么
调整大小
缩略图
更好。有人能详细说明吗?@ClodoaldoNeto,没什么区别。我刚刚检查了源代码,
缩略图
调用
调整大小
。From:
质量
:图像质量,从1(最差)到95(最佳)。默认值为75。应避免超过95的数值;100将禁用部分JPEG压缩算法,并导致大文件的图像质量几乎没有任何提高。谢谢大家。很高兴它有帮助“图像质量,从1(最差)到95(最佳)。默认值为75。应避免95以上的值;100完全禁用JPEG量化阶段。”@Izzad DinRuhulessin链接似乎已断开。也许你可以背诵它。只有当你使用了一个糟糕的降尺度过滤器时,这才是真的。