ImageMagick - .PNGで正確なカラーパレットを維持する方法

ImageMagick - .PNGで正確なカラーパレットを維持する方法

ImageMagickで(後で再び)convert(1)変換に使用しようとしています。.tga.png正確なカラーパレットを維持それが使用されました。

ソースイメージは、標準の8ビット256カラーパレットから24ビットRGB値を含むTARGAカラーインデックスファイルです。この256色のうち239色が実際に画像のピクセル値として使用されます。

ただし、単純な場合、convert a.tga a.pngPNG を作成すると未使用のパレットの色が削除され、他のパレットの値もそのインデックスが変更されます。デフォルトでは、カラーパレットを維持しながら変換するか、うまく機能します.tiff(次を使用して.gifカラーパレットを手動で確認しました)。identify -verbose a.tiff

% identify a.png a.tga a.tif a.gif
a.png PNG 320x200 320x200+0+0 8-bit sRGB 239c 29549B 0.000u 0:00.000
a.tga TGA 320x200 320x200+0+0 8-bit sRGB 256c 64790B 0.000u 0:00.000
a.tif TIFF 320x200 320x200+0+0 8-bit sRGB 256c 65818B 0.000u 0:00.000
a.gif GIF 320x200 320x200+0+0 8-bit sRGB 256c 29830B 0.000u 0:00.000

パレットがまったく同じになるようにしたいです(TGA index 55値がある場合は、R=200 G=150 B=100結果PNGは次のようになります)。同じR=200 G=150 B=100同じインデックス位置55。また、この画像で使用されていないインデックス値も同じ値で同じインデックス位置に保持する必要があります(理由は、後で画像に使用されたピクセルのインデックス値がハードコーディングされたサードパーティコードで使用されるためです)。書く)

本質的に私は欲しいフルカラーパレットはまったく同じままです。TGA-> PNG->に変換するときTGA

imagemagickはこれを行うことができ、どのように実行できますか(それ以外の場合は独自のツールに代わるものはありますか?)。 (-colors 256などのような他のオプションを試してみましたが役に立ちませんでした-remap a.tgapng8:

ImageMagick 6.9.10-23 Q16必要に応じてDebian Busterを使用しています。

修正する:オプションがあるようです。-png 定義:カラーマップを保持=true私が欲しいと思いますが、パレットを使用しても機能しないようですか? !

% convert a.tga -define png:preserve-colormap=true png8:a.png
convert-im6.q16: Valid palette required for paletted images `a.png' @ error/png.c/MagickPNGErrorHandler/1641.

(それなしで動作しますpng8:が、color_type:2インデックス付き(パレットを含む)の代わりにTrue Color PNG(パレットなし)を生成するため、color_type: 3目的は失われます。

答え1

この問題非常に有益であり、オプションが不足している場合に手動で問題を解決するためにPNGビルダーを使用する驚くほど簡単なPerlスクリプトの回避策も提供します。

しかし、代わりにパッケージを試してみましたが、GraphicsMagick 1.3.35このパッケージは私のTGAファイルでは機能しないようですが(しかし主張していますが)、部分的な解決策を提供します。

最後に、ImageMagickとGraphicsMagickの組み合わせを使用して、PNGこのパイプラインと同じパレットのカラーインデックスを作成してこれを達成しました。TGA

convert a.tga tiff:- | gm convert - a.png

あいまいですが効果的です。誰かがあれば、よりクリーンな解決策を見たいのですが...

関連情報