10

PILの4つのアルゴリズムすべてから同じ見栄えの悪いサイズ変更を取得しています

>>> 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")

しかし、Firefoxでサイズを変更するよりも、結果ははるかに悪く見えます。

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

PIL(または別のPythonイメージライブラリ)を使用してFirefoxの結果と同様の効果を得るにはどうすればよいですか?

編集:マウスをホバーして、各画像が何であるかを確認します

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

参考までに、これは最もよく見えたものです:

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

4 に答える 4

9

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とほぼ同じです。

于 2009-09-06T21:21:59.350 に答える
1

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

いいえ、それは確かに期待される結果です。元の制限付きパレットモードでサイズ変更を行うと、パレットに使用可能な中間色がないため、ギザギザのゴミが発生する可能性があります。ANTIALIASは、ダウンスケーリングに使用することを目的とした唯一のサイズ変更フィルターです。BILINEARとBICUBICは、実際には軸ごとに2ピクセルしか使用せず、それらをブレンドします。これは、アップスケーリングには問題ありませんが、一方または両方の軸がダウンスケール。

残念ながら、thumbnail()は実際には正しく機能しなかったため、自分で行う必要があります。

于 2009-09-08T01:07:27.627 に答える
0

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

また、コードは.gifを読み取ることを示していますが、元のコードは.pngです。削減を開始する前に、元のデータがすべて実際にあることを確認してください。

于 2009-09-06T19:01:48.697 に答える
0

投稿された画像はインデックス付きの画像です。そのモードは'P'、PILを介して読み取る場合です。リサンプルパラメータのImage.resize()に関するPILドキュメントには、次のように記載されています。

画像のモードが「1」または「P」の場合、常にPIL.Image.NEARESTに設定されます。

したがって、PILは、インデックス付き画像のサイズ変更に最も近いフィルターを使用します。これは、低品質のフィルターです。

正しい方法は、画像モードをに変換してからRGB、などの高品質フィルターでサイズ変更を使用することImage.LANCZOSです。ちなみに、今は、ソースはこちらImage.ANTIALIASと同じです。Image.LANCZOS

import Image
img = Image.open("beta-icon.gif").convert("RGB")
img = img.resize((36,36), Image.LANCZOS)
img.save("img-resized.png")
于 2020-11-19T09:52:40.947 に答える