web-dev-qa-db-ja.com

UNIXシェルでグレースケール画像をアルファチャネル画像に変換する

グレースケールの画像があります。すべての色合いで、(元の画像の)黒いピクセルが完全に不透明になり、白いピクセルが完全に透明になり、50%の灰色のピクセルが50%透明になるように、透明なPNGに変換したいと思います。間に。

どうすればこれを達成できますか?

(はい、これはほぼと同じ質問です グレースケールシェードをアルファチャネルに変換する ですが、知りたいですこれを行う方法コマンドラインツールのみを使用–例:ImageMagickまたはNetPBM)

上記の質問の結果のサンプルを次に示します。このサンプルは、コマンドラインツールのみを使用して実現したい結果です。

Sample

透明度をサポートするビューアでこのPNGを開くと、私が何を意味するかがわかります。

15
zrajm

Ooookay。たくさんグーグルして、私が実際に気にかけているよりも多くのImageMagickマニュアルを読んだ後、ここに答えがあります。 source.pngというグレースケール画像がある場合、これが私のコマンドです。

黒のピクセルを透明にし、白のピクセルをそのまま維持するには、次のコマンドを実行します。

 convert source.png -alpha copy -fx '#fff' result.png

代わりに黒をそのままにして白のピクセルを透明にするには、次を使用します。

 convert source.png -alpha copy -channel alpha -negate +channel -fx '#000' result.png

最後のコマンドをもう少し詳しく説明しましょう。

  • convert – ImageMagicコマンドです(いくつかのコマンドの1つ)
  • source.png –グレースケールソース画像。
  • -alpha copy –前のファイルの内容をアルファチャンネルにコピーします。
  • -channel alpha –次の演算子のみがアルファチャネルに影響するように指定します。
  • -negate –アルファチャネルを反転します(前の-chanel alphaのため、画像の他の部分には影響しません)。
  • +channel –次の演算子のみがカラーチャンネルに影響を与え、アルファチャンネルは変更しないように指定します。 (これはデフォルトであるため、最初のより単純な例で提供する必要はありません。)
  • -fx '#000' –カラーチャネルの内容を黒のピクセルに置き換えます。 (+channelのため、アルファチャネルは影響を受けません)。

最後の-fxオプションを含めることは非常に重要です。そうしないと、生成された画像のすべての半透明ピクセルが色を保持します。 (これらのピクセルは半透明であるため、明らかではないかもしれませんが、最終的な結果は期待したものではありません。)

ImageMagickオプション のリストは非常に便利だと思いました。

19
zrajm

ImageMagick 7.0では、上記の答えはもうありません。しかし、あなたは使うことができます:

変換source.png-channel rgb -fx '#fff' result.png

別名、RGBチャンネルを空白で埋め、前と同じようにアルファを設定します。

0
tito

Imagemagick 7では、-channel RGBの前に-fxを指定する必要があることがわかりました。そうしないと、次のように黒一色の画像が表示されます。

convert input.png -alpha copy -channel RGB -fx '#000' out.png

また、黒を不透明にし、白を透明にしたい場合は、negateが便利です。

convert input.png -negate -alpha copy -channel RGB -fx '#000' out.png
0
Chris