0

PNGファイルとGIFファイルのファイルサイズをプログラムで縮小(不可逆)しようとしています。その一環として、画像の色数を減らす必要があります。すべての画像を単一の色の値に減らしたくないので、私がしているのは次のとおりです。次に、画像内の一意の色の数を取得します。この数を2で割ると、色の数が半分になります。

問題は、これが機能しないことです。ImageMagicを使用すると、速度が遅すぎて、画像の固有の色が数百未満でない限り、ファイルサイズが小さくなりません。GraphicsMagickを使用すると、元の画像の色の数に関係なく、常に255未満の一意の色の値になります。GraphicsMagickのもう1つの問題は、画像に透明なピクセルがある場合、失われた色が透明に置き換えられることです。

どんな助けでも大歓迎です、ありがとう。

4

3 に答える 3

1

色の数を減らすことは、次の場合にのみ役立ちます

  1. 画像は、各ピクセルの色を保存する代わりにパレットを使用できます
  2. パレットインデックスのサイズが色のサイズよりも小さい
  3. 画像形式はパレットサイズをサポートします

これらのフォーマットでは、1ビット、4ビット、8ビット、つまり2色、16色、または256色しか入手できないと思います。もっと多くを要求すると、256に切り捨てられるだけだと思います。それより少なく要求すると、パレット全体が使用されません。

JPEGに変換して、品質設定で遊ぶことを検討しましたか?最終的には、損失性をより細かく制御できます。欠点は、画像が写真ではない場合ですが、色がたくさんあるように聞こえるので、そうなる可能性があります。

おそらく、必要なものに近い場合は1、4、8ビットを選択し、色が多い場合はjpegを選択します。

于 2010-11-18T18:54:42.487 に答える
1

あなたが求めているImageMagick機能は量子化かもしれないと思います:

http://www.imagemagick.org/Usage/quantize/

于 2010-11-19T01:48:57.173 に答える
0

最初の問題は、GraphicsMagickが8ビット、16ビット、または32ビットの量子レベルを使用してコンパイルできることです。私のバージョンは8ビット(デフォルト)にコンパイルされています。これは、画像に割り当てることができる色の最大数が256の一意の色であることを意味します(3 * 3 * 2、人間の目ができるため、青いビットの1つが削除されます正しく表示されません)。明らかに、GraphicsMagickはこれよりも多くの色の画像を処理できますが、色を減らす場合は256色以下にしか減らすことができません。ピクセルクォンタムが大きくなると、GraphicsMagickの実行速度が遅くなり、より多くのメモリが必要になります。たとえば、16ビットピクセルクォンタムを使用すると、GraphicsMagickは8ビットピクセルクォンタムをサポートするように構築されている場合よりも15%から50%遅くなります(そして2倍のメモリを消費します)。

2番目の問題; PNG画像の透明度処理では、以前のバージョンのGraphicsMagick(1.1だと思います)を使用していましたが、1.3にアップグレードすると、この問題は発生しなくなり、GraphicsMagick1.1のバグが原因であることがわかります。

于 2010-12-01T16:46:27.103 に答える