2009-09-10 7 views
45

私はPILに取り組んでおり、画像のサイズ変更やサムネイル処理中に画質を調整できるかどうかを知る必要があります。私が知っていることから、デフォルトの品質は85に設定されています。サイズ変更時にこのパラメータを微調整できますか?Python Imaging Libraryでサイズ変更されたイメージの品質を調整するには?

私は現在、次のコードを使用しています:

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

ANTIALIASパラメータは、おそらく最高の品質を提供します。私は、品質オプションでより細分化できるかどうかを知る必要があります。

答えて

70

手動で使用PILのresize方法:保存方法

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

続く

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

は、彼らはそれを行う方法を確認するためにPhotologueからmodels.pyのソースを見てみましょう。

+1

おかげのようなセットの品質は、私が探していただけで正確に何thatsの... ちょうど追加: 品質オプションはkwargですので、品質=品質 – bigmac

+0

@bigmacとして渡されなければなりません - ありがとう、編集中! –

+1

また、元の画像が '索引付け 'されている場合、' .resize() 'を呼び出す前に' RGB'または 'RGBA'に変換すると出力の質が向上することに注意してください。 –

44

ANTIALIASは、「85」品質レベルには匹敵しません。 ANTIALIASパラメータは、ピクセルをあるサイズから別のサイズにリサンプリングするために使用するアルゴリズムをサムネイルメソッドに通知します。私はこのようになります3x3の画像がある場合たとえば、:

2 2 2 
2 0 2 
2 2 2 

と私は2×2のサイズを変更し、1つのアルゴリズムは、私を与える可能性があります

2 2 
2 2 

ピクセルのほとんどは近く2Sであるため、別の人が私に与えるかもしれない:

1 1 
1 1 

中間の0を考慮する。しかし、あなたはまだ圧縮に対処し始めておらず、画像を保存するまでは圧縮されません。つまり、サムネイル表示では、品質の階調を扱うのではなく、リサンプリングのための離散アルゴリズムを使用するということです。そうですね、ここで細かい制御はできません。

損失のある圧縮形式で保存すると、品質のレベルを指定する場所になります。

+4

+1、それを説明する優れた方法 –

+1

それは本当に良い説明です。乾杯... – bigmac

+0

ありがとうございます。喜んで役立ちました – jcdyer

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 –

0

より良い品質を達成する1つの方法は、2段階でダウンスケーリングを行うことです。たとえば、あなたの元画像が1200x1200で、あなたは64×64ピクセルにサイズを変更する必要がある場合は、最初の段階でこれらの2つのサイズの中間のどこかにそれをダウンスケール:

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

+4

これは、劣悪なダウンスケールフィルタを使用する場合にのみ該当します。 – mattdm

関連する問題