ImageMagickで32ビットpngを8ビットpngに変換したいのですが、半透明のピクセルが失われます。この問題を解決する方法は?私が使用しているコマンドは次のとおりです
convert original.png PNG8:output.png
どうやら、PNG形式では実際には8ビットインデックスカラーPNGのすべての色を完全にまたは部分的に透明にすることができますが、ImageMagickの「PNG8」 形式指定子 はGIFスタイル1-のみをサポートしますビットの透明度。
PNG8:
指定子を使用してnotでImageMagickを使用してインデックス付き8ビットPNGを生成することは可能ですが、単に-colors 256
または-colors 255
*を使用して色の数を減らします画像。残念ながら、少なくともImageMagick 6.8.9を使用した私のテストに基づくと、結果の画像には、かなり奇妙で、非常に不必要に醜い色の量子化アーティファクトが含まれています。
幸いなことに、この特定のジョブにははるかに優れたツールがあります: pngquant 。これを使用すると、32ビットRGBA PNGを8ビットカラーマップPNGに変換し、品質の低下を最小限に抑えることができます。
pngquant 256 < original.png > output.png
簡単なデモンストレーションとして、さまざまな方法を使用して8ビットPNGに変換された簡単なテスト画像(半透明のドロップシャドウのある星)を次に示します。
左から右へ:
pngquant 256 < input.png > output.png
で量子化convert input.png -colors 255 output.png
*で量子化convert input.png PNG8:output.png
で量子化convert input.png -colors 255 PNG8:output.png
*で量子化*)以下のコメントでは、「「背景」色用に1つのエントリを予約する」ために-colors 255
が必要であることが示唆されています。私のテストに基づいて、私はこれが実際に当てはまるとは観察していません。 -colors 256
を使用しても 8ビットのカラーマップPNGを生成 、量子化アーティファクトは-colors 255
の出力と質的に類似していますが、詳細が異なります。それでも、安全にプレイするために、上記の例では-colors 255
を使用しました。 pngquant 255
を使用したテストでは デモンストレーション になるため、カラーマップのサイズを1色小さくしても、それ自体で結果の品質に大きな影響を与えることはありません。