10

画像全体を半透明に変換したい PNG ファイルがあります。

画像は、Google Earth/マップで使用するアイコン オーバーレイとして KML ファイルで参照されます。

次の例は、ImageMagick のconvertコマンドを使用して提案されましたが、どちらも機能していないようです。

最初の例はエラーになります。

$ /usr/local/bin/convert 121112142121.png -channel Alpha -evaluate Set 50% 2121112142121.png
convert: no decode delegate for this image format '121112142121.png' @ error/constitute.c/ReadImage/550.
convert: option requires an argument '-evaluate' @ error/convert.c/ConvertImageCommand/1400.

2 番目は、画像に目に見える変更を加えることができません。

convert filename.png -fill '#00000080' -draw 'matte 100,100 reset' output.png

特定の色またはアルファ マスクから完全に透明な画像を作成するための Web 上の多くの例を見つけることができますが、半透明の画像を作成したり、不透明度を変更したりするために機能するものを見つけることができないようです。convert コマンドまたは ImageMagick Perl を使用してこれを行う方法を見つけたいと思います。

(ImageMagick のバージョンは 6.8.0-4)

4

3 に答える 3

14

解決策が見つかりました:

convert input.png -alpha set -channel A -evaluate set 50% output.png

上記のコマンドは、画像全体 (すべての色) を半透明にします。

私が抱えていたもう 1 つの問題は、ImageMagick の最新バージョンが、最新のイメージ ライブラリ (特に libpng) がすべてインストールされていない状態でソースからコンパイルされたことです。ソースからコンパイルする場合は、configure の出力に細心の注意を払い、libpng が検出されるようにします。また、6.6 より前のバージョンの ImageMagick および/または libpng の古いバージョンでは、透過 png の生成がサポートされていないようです。

于 2012-11-14T05:53:08.293 に答える
8
convert input.png -alpha set -channel A -evaluate Divide 2 output.png

コメントでこれを指摘してくれてありがとう@caw。これは、画像にすでに透明なピクセルが含まれている場合に役立ちます。-evaluate set 50%アルファ 0 の既に透明なピクセルを台無しにし、アルファを 50% に設定しますが、これは多くの場合望ましくありません。

-evaluate Divide 2完全に透明なピクセルはアルファ 0 であり、0 を 2 で割っても 0 のままであるため、アルファを保持します。

于 2016-10-16T02:46:09.933 に答える
0

Tony Bogdanov のコメントのフォローアップ。すでに完全に透明なピクセルがある場合は、次の戦略を使用することをお勧めします。

1.) 透明ピクセルをマスクに変換します

convert -alpha extract input.png mask.png

2.) 上記の回答に記載されているコマンドを実行します。

convert input.png -alpha on -channel a -evaluate set 65% output.png

3.)元の画像と同じサイズの空白のキャンバスを作成します

例: convert -size 700x800 xc:none blankcanvas.png

4.) 透明なピクセル マスクを使用して、半透明の画像と空白のキャンバスを合成します。

composite output.png blankcanvas.png mask.png -compose Src final_output.png

于 2016-09-26T14:42:01.630 に答える