ImageMagick で 32 ビット png を 8 ビット png に変換したいのですが、半透明のピクセルが失われます。この問題を解決するには?私が使用しているコマンドは次のとおりです
convert original.png PNG8:output.png
ImageMagick で 32 ビット png を 8 ビット png に変換したいのですが、半透明のピクセルが失われます。この問題を解決するには?私が使用しているコマンドは次のとおりです
convert original.png PNG8:output.png
どうやら、PNG 形式では実際には 8 ビットのインデックス付きカラー PNG のすべての色を完全または部分的に透明にすることができますが、ImageMagick の "PNG8"形式指定子は GIF スタイルの 1 ビット透明のみをサポートします。
ImageMagick を使用してインデックス付きの 8 ビット PNG を生成するには、指定子を使用せずに、または* を使用して画像の色数を減らすPNG8:
だけです。残念ながら、少なくとも ImageMagick 6.8.9 を使用した私のテストに基づくと、結果の画像にはかなり奇妙で不必要に醜い色の量子化アーティファクトが含まれています。-colors 256
-colors 255
幸いなことに、この特定のジョブにははるかに優れたツールがあります: 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
*でクオンタイズ-colors 255
*) 以下のコメントでは、「'背景' カラー用に 1 つのエントリを予約する」必要があることが示唆されています。私のテストに基づいて、これが実際に当てはまるとは思いませんでした。-colors 256
. _ _ _ -colors 255
_ とはいえ、念-colors 255
のために上記の例を使用しました。を使用したテストで示さpngquant 255
れるように、カラーマップのサイズを 1 色だけ縮小しても、それ自体は結果の品質に大きな影響を与えることはありません。