2009-09-06 13 views
8

私は PIL:画像サイズ変更:アルゴリズムFirefoxの

>>> data = utils.fetch("http://wavestock.com/images/beta-icon.gif") 
>>> image = Image.open(StringIO.StringIO(data)); image.save("/home/ptarjan/www/tmp/metaward/original.png") 
>>> 
>>> image = Image.open(StringIO.StringIO(data)); image.resize((36,36), Image.ANTIALIAS).save("/home/ptarjan/www/tmp/metaward/antialias.png") 
>>> image = Image.open(StringIO.StringIO(data)); image.resize((36,36), Image.BILINEAR).save("/home/ptarjan/www/tmp/metaward/bilinear.png") 
>>> image = Image.open(StringIO.StringIO(data)); image.resize((36,36), Image.BICUBIC).save("/home/ptarjan/www/tmp/metaward/bicubic.png") 
>>> image = Image.open(StringIO.StringIO(data)); image.resize((36,36), Image.NEAREST).save("/home/ptarjan/www/tmp/metaward/nearest.png") 
>>> 
>>> image = Image.open(StringIO.StringIO(data)); image.thumbnail((36,36), Image.ANTIALIAS); image.save("/home/ptarjan/www/tmp/metaward/antialias-thumb.png") 
>>> image = Image.open(StringIO.StringIO(data)); image.thumbnail((36,36), Image.BILINEAR); image.save("/home/ptarjan/www/tmp/metaward/bilinear-thumb.png") 
>>> image = Image.open(StringIO.StringIO(data)); image.thumbnail((36,36), Image.BICUBIC); image.save("/home/ptarjan/www/tmp/metaward/bicubic-thumb.png") 
>>> image = Image.open(StringIO.StringIO(data)); image.thumbnail((36,36), Image.NEAREST); image.save("/home/ptarjan/www/tmp/metaward/nearest-thumb.png") 
>>> 
>>> image = Image.open(StringIO.StringIO(data)); image.convert("RGB").resize((36,36), Image.ANTIALIAS).save("/home/ptarjan/www/tmp/metaward/antialias-rgb.png") 
>>> image = Image.open(StringIO.StringIO(data)); image.convert("RGB").resize((36,36), Image.BILINEAR).save("/home/ptarjan/www/tmp/metaward/bilinear-rgb.png") 
>>> image = Image.open(StringIO.StringIO(data)); image.convert("RGB").resize((36,36), Image.BICUBIC).save("/home/ptarjan/www/tmp/metaward/bicubic-rgb.png") 
>>> image = Image.open(StringIO.StringIO(data)); image.convert("RGB").resize((36,36), Image.NEAREST).save("/home/ptarjan/www/tmp/metaward/nearest-rgb.png") 

PIL

のすべての4つのアルゴリズムからリサイズを見て悪いと同じ について取得していますが、結果はちょうどFirefoxでリサイズすることをはるかに悪い見てに似ています。

http://paulisageek.com/tmp/metaward/images.html

どのように私はPIL(または別のPythonの画像ライブラリ)を使用して、Firefoxの結果と同様の効果を得ることができますか?

EDIT:各画像が何であるかを見るためにあなたのマウスを移動

http://paulisageek.com/tmp/metaward/original.png http://paulisageek.com/tmp/metaward/antialias.png http://paulisageek.com/tmp/metaward/bicubic.png http://paulisageek.com/tmp/metaward/bilinear.png http://paulisageek.com/tmp/metaward/nearest.png http://paulisageek.com/tmp/metaward/antialias-thumb.png http://paulisageek.com/tmp/metaward/bicubic-thumb.png http://paulisageek.com/tmp/metaward/bilinear-thumb.png http://paulisageek.com/tmp/metaward/nearest-thumb.png http://paulisageek.com/tmp/metaward/antialias-rgb.png http://paulisageek.com/tmp/metaward/bicubic-rgb.png http://paulisageek.com/tmp/metaward/bilinear-rgb.png http://paulisageek.com/tmp/metaward/nearest-rgb.png

これはRGBのように見え、次にANTIALISが最もよく見えます。その他の推奨事項はありますか?

は参考のために、これは最高のを見ていずれかになります。

>>> image = Image.open(StringIO.StringIO(data)); 
>>> image.convert("RGB").resize((36,36), Image.ANTIALIAS) 
+0

使用しているPILのバージョンは何ですか? –

+0

PILバージョン:/usr/lib/python2.5/site-packages/PIL/PIL-1.1.6.egg-info –

+0

GimpはPILと同じ結果を生成します。 –

答えて

8

私はPythonで「オリジナル」のサイズを変更し、同じ結果を見つけました。私もGIMPで「オリジナル」のサイズを変更し、同じ(もし劣っていないとしても)品質を得ました。これは、私がFirefoxの詐欺を疑う。おそらくRGBに変換されます(「オリジナル」モードはインデックスカラーです)。したがって、次のコード:

import Image 
im=Image.open("beta-icon.gif") 
im = im.convert("RGB") 
im=im.resize((36,36), Image.ANTIALIAS) 
im.save("q5.png") 

結果はFirefoxとほぼ同じです。

+0

これは良いサムネイルを得るための一般的な戦略ですか?私のコーパスの例が必要な場合、私は約10kの画像を持っています:http://metaward.com/awards –

+2

確かに。インデックス付きの色でイメージのサイズを変更しても、通常は良い結果が得られません。パレットの保存を気にしない場合は、常にRGBに移動してから、サイズを変更して色の深さをもう一度減らす必要があります。 –

+0

ありがとうRoberto。なぜそれが既知の方法であれば、PILはデフォルトでそれをしませんでしたか? –

0

thumbnail()の代わりにresize()方法を使用してみてください。私の経験では、彼らは非常に異なった振る舞いをしています。

また、コードは.gifの読み込みを示していますが、オリジナルは.pngです。元のデータをすべて元に戻してから縮小してください。

+0

申し訳ありませんが、私はオリジナルを作った線を切ります。しかし、ええ、それはただの転換でした。 サイズを変更して比較しようとします。 –

+0

サンプルページは現在すべてresize()ですが、FFのように見えます。その他の提案はありますか? –

1

RGBのように見え、次にANTIALISが最もよく見えます。その他の推奨事項はありますか?

いいえ、それは確かに期待された結果です。元の限定パレットモードで行われたリサイズは、パレット内の使用可能な中間色の不足のためにジャギーが発生する可能性があります。 ANTIALIASはのサイズ変更フィルタで、縮小に使用することを意図しています.BILINEARとBICUBICは実際には軸あたり2ピクセルしか取らずにそれらをブレンドしますが、アップスケーリングには問題ありませんが、軸は縮小されます。

残念ながら、thumbnail()は実際には正常に動作していないので、自分で行う必要があります。

+0

それから.thumbnailを削除し、必要に応じてパレットを変換してからresizeを使用する.thumbnail(サイズ)に置き換えてください。 PILの新しいコミッショナーとして、.thumbnailはまさに私が必要としていたようでした。 –

+0

確かに、それは改善される可能性のあるPILの厄介なコーナーの1つですが、新しいユーザーのための魅力的な探しの罠です。 – bobince

+0

実際には、RGBでそれをやって、私はアルファチャンネルを失った。それを維持する方法はありますか? –

関連する問題