16

ImageMagick で 32 ビット png を 8 ビット png に変換したいのですが、半透明のピクセルが失われます。この問題を解決するには?私が使用しているコマンドは次のとおりです

convert original.png PNG8:output.png
4

1 に答える 1

22

どうやら、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 ImageMagick 変換 (-colors 255) ImageMagick 変換 (PNG8) ImageMagick 変換 (-colors 255、PNG8)

左から右へ:

  1. 元の 32 ビット RGBA PNG
  2. で量子化pngquant 256 < input.png > output.png
  3. convert input.png -colors 255 output.png*でクオンタイズ
  4. で量子化convert input.png PNG8:output.png
  5. convert input.png -colors 255 PNG8:output.png*でクオンタイズ

-colors 255*) 以下のコメントでは、「'背景' カラー用に 1 つのエントリを予約する」必要があることが示唆されています。私のテストに基づいて、これが実際に当てはまるとは思いませんでした。-colors 256. _ _ _ -colors 255_ とはいえ、念-colors 255のために上記の例を使用しました。を使用したテストで示さpngquant 255れるように、カラーマップのサイズを 1 色だけ縮小しても、それ自体は結果の品質に大きな影響を与えることはありません。

于 2012-12-25T15:53:44.747 に答える