7

SO には同様の質問がいくつかありますが、どれも実際には役に立ちませんでした。基本的に、ここに見られるように、単純なpng画像のサイズを変更しようとしています:

http://media.spiralknights.com/wiki-images/3/3e/Equipment-Proto_Sword_icon.png (mmo Spiral Knights より、著作権は Three Rings Entertainment)

私は元々、これらの画像を php で使用するユーティリティを実装していましたが、そこにあるサイズ変更ユーティリティは完全に機能しました。PHP のドキュメントの imagecopyresampled ページに記載されている方法を使用しました。

正直なところ、Photoshop でより適切にサイズ変更することさえできませんが、結果は Python ではほとんど壊滅的です。私は一貫してハロー効果を得ており、これは透明ピクセルの実際の RGBA 値の少なくとも一部であると考えています。ここで、この写真はそれをよりよく物語っています:

サイズ変更の例

(最後から 2 番目のサイズ変更は、私が別のフォーラムで見た、最終的なサイズの最初の 2 倍にサイズ変更するという提案にすぎませんでした。少なくとも少しは役に立ちましたが、十分ではありませんでした)

サイズ変更中の画像は、すでに RGBA モードになっています。

ご覧のとおり、PHP と Photoshop のサイズ変更はハローフリーです。正直なところ、PHP のサイズ変更以外はすべて機能しすぎます。PHP 画像の最小限のパレットが気に入っています (より大きなバージョンを見ると、PHP のサイズ変更が色の間で使用する量が少ないことがわかります)。サイズを変更したか、Python の内部部分のサイズを変更しましたが、ハローは受け入れられません。

PHPとPhotoshopは、補間時にアルファチャンネルのピクセルの色を使用しないことを知っているようですが、Pythonはその明るい境界線を使用しており、それ以外の場合は透明です。 、そのサイズ変更で。

残念ながら、さまざまなプロファイルでサイズを変更する必要があるさまざまなアイコンがたくさんあるため、すべてがこの円形のアイコンほど単純ではありませんが、これは実験中に使用した最初のアイコンにすぎません。

それ自体はコードの問題ではありませんが、何か調べる必要がある場合は、これが要点です。

>> import Image
>> img = Image.open('swordorig.png')
>> img
<PngImagePlugin.PngImageFile image mode=RGBA size=256x256 at 0x2A3AF58>
>> img.resize((36,36), Image.ANTIALIAS).save('swordresize.png')

最終的な質問は次のとおりです:リサンプリング中にアルファが0のピクセルの色を使用しないようにPILに指示する方法はありますか?

4

1 に答える 1

7

答えてくれてありがとう!特に、私が実際に探していた用語を教えてくれた rotoglup に感謝します。PIL で事前に乗算されたアルファのスタック オーバーフロー ページを調べると、うまくいく解決策が見つかりました。これは、サイズ変更グラフィックの更新されたシートです。

シート 2 のサイズ変更

グレーのバーは、明るい背景でどのように見えるかを示すためのものです。

https://stackoverflow.com/a/6882161/1189554

マドラグに感謝

したがって、私のコードは次のようになります。

>> import Image, numpy
>> img = Image.open('swordorig.png')
>> premult = numpy.fromstring(img.tostring(), dtype=numpy.uint8)
>> alphaLayer = premult[3::4] / 255.0
>> premult[::4] *= alphaLayer
>> premult[1::4] *= alphaLayer
>> premult[2::4] *= alphaLayer
>> img = Image.fromstring("RGBA", img.size, premult.tostring())
>> img.resize((36,36), Image.ANTIALIAS).save('swordresize.png')

そして、シートの下部にあるアイコンを取得します。PHPバージョンよりもさらに多くの色と非常にマイルドなリングですが、全体的にはるかに優れています. アルゴリズムを微調整して、さらに改善できると確信しています。回答してくださった皆様、改めてありがとうございました!

于 2012-02-05T01:36:19.503 に答える