web-dev-qa-db-ja.com

Python Imaging Library?でサイズ変更された画像の品質を調整するには?

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

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

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

ANTIALIASパラメーターはおそらく最高の品質を提供します。品質オプションの精度を高めることができるかどうかを知る必要があります。

53
bigmac

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)

Photologueの models.py のソースを見て、その方法を確認してください。

82
Dominic Rodger

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

2 2 2
2 0 2
2 2 2

そして、私はそれを2x2にサイズ変更し、1つのアルゴリズムが私に与えるかもしれません:

2 2
2 2

近くのピクセルのほとんどが2であるのに対し、別のピクセルが私に与える可能性があるため:

1 1
1 1

中央の0を考慮するため。ただし、圧縮処理はまだ開始されておらず、画像を保存するまで実行されません。つまり、サムネールでは、品質のグラデーションではなく、リサンプリングのための個別のアルゴリズムを使用します。だから、ここではきめ細かく制御することはできません。

非可逆圧縮を使用した形式で保存する場合は、品質のレベルを指定する場所です。

46
jcdyer

再スケーリングと圧縮を混同しないでください。

最高の品質を得るには、両方を使用する必要があります。次のコードを参照してください。

from PIL import Image

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

このようにして、私は自分のプログラムに非常に良い親指を立てています。

11
DenisKolodin

90のようなアンチエイリアスn設定品質

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

http://www.dzone.com/snippets/resize-thousands-images-python

1
ngakak