2009-09-10 143 views
45

我在PIL上工作,需要知道在調整圖像大小或縮略圖時是否可以調整圖像質量。從我所知道的是默認質量設置爲85.該參數可以在調整大小時進行調整嗎?如何調整Python Imaging Library中調整大小的圖像的質量?

我目前使用下面的代碼:

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

ANTIALIAS參數想必給出了最好的質量。我需要知道我們是否可以在質量選項上獲得更多的粒度。

回答

70

使用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,看看他們是如何做到這一點。

+1

謝謝,那只是正是我一直在尋找... 只是一個補充: 質量選項是一個kwarg所以必須通過質量=質量 – bigmac 2009-09-10 15:21:45

+0

@bigmac - 謝謝,編輯! – 2009-09-10 15:53:15

+1

另外請注意,如果您的原始圖片是索引的,在大多數情況下,如果您在調用'.resize()'之前將其轉換爲RGB或RGBA,它將提高輸出的質量。 – 2010-10-20 07:41:49

44

ANTIALIAS與「85」質量水平決不可比。 ANTIALIAS參數告訴縮略圖方法使用什麼算法將像素從一個尺寸重新採樣到另一個尺寸。舉例來說,如果我有一個看起來像這樣的3×3的圖像:

2 2 2 
2 0 2 
2 2 2 

,我又把它調整爲2×2,一個算法可能給我:

2 2 
2 2 

因爲大多數像素的附近還有2秒,而另一個可能會給我:

1 1 
1 1 

爲了考慮中間的0。但是你還沒有開始處理壓縮,直到你保存圖像。也就是說,在縮略圖中,您沒有處理質量等級,而是使用離散算法進行重採樣。所以不,你不能在這裏得到更好的控制。

如果您保存爲有損壓縮格式,那就是指定質量級別的地方。

+4

+1,很好的解釋方法 – 2009-09-10 14:48:10

+1

這是一個很好的解釋。乾杯... – bigmac 2009-09-10 15:10:53

+0

謝謝大家。很高興有幫助 – jcdyer 2009-09-29 15:44:49

8

不要混淆重新縮放和壓縮。

爲了獲得最佳質量,您必須同時使用兩者。看到下面的代碼:

from PIL import Image 

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

在這種方式,我有我的程序非常好的拇指。

+16

「圖像質量,從1(最差)到95(最好)的比例,默認值爲75.應該避免95以上的數值; 100完全禁用JPEG量化階段。 http://www.pythonware.com/library/pil/handbook/format-jpeg.htm – 2012-02-27 02:55:18

0

實現更好質量的一種方法是分兩步進行縮小。例如,如果你的原始圖像爲1200x1200,你需要將其調整到64×64像素,然後在第一個步驟中縮減至介於這兩種尺寸的中間:

爲1200x1200 - > 600×600 - > 64×64

+4

只有在使用較差的縮小比例過濾器時,纔會出現這種情況。 – mattdm 2012-08-12 13:55:44