2012-11-13 47 views
6

画像全体を半透明に変換したいPNGファイルがあります。画像は、Google Earth/Mapsで使用するためのアイコンオーバーレイとしてKMLファイルで参照されます。Centos LinuxでImageMagickを使用して半透明のPNGを作成する

次の例はImageMagick convertコマンドを使用して私に示唆されていますが、いずれもうまくいかないようです。最初の例ではエラーが発生し、2番目の例ではイメージに観察可能な変更が加えられません。

$ /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. 

二提案された方法は、このでした:私は特定の色またはアルファマスクから完全に透明画像を作成するためのウェブ上の多くの例を見つけることができますが、私はいずれかを見つけることができないよう

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

半透明の画像を作成するために働く。私はconvertコマンド、またはImageMagick Perlを使ってこれを行う方法を見つけたいと思います。

ImageMagickのバージョンは6.8.0-4です。

答えて

12

解決策が見出された:

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

上記コマンドは、画像全体(全色)半透明になります。

ImageMagickの最新バージョンは、最新のイメージライブラリ(特にlibpng)がインストールされていないと、ソースからコンパイルされていたという別の問題がありました。ソースからコンパイルする場合、libpngが見つかるようにconfigureの出力に細心の注意を払ってください。 6.6より前のバージョンのImageMagickや古いバージョンのlibpngは、透過的なpng生成をサポートしていないかもしれません。

+8

元の画像から独立させたい場合は、 '-evaluate Divide 2'を使用することもできます(すべてのピクセルの透明度を2倍にするだけです)。 – caw

+6

このアプローチの問題点は、画像に完全に透明なピクセルがある場合、その透明度が半透明の黒に変わるように見えることです。 –

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)半透明の画像と一緒に

4
convert input.png -alpha set -channel A -evaluate Divide 2 output.png 

composite output.png blankcanvas.png mask.png -compose Src final_output.pngありがとう透明画素マスクを使用して空白のキャンバスは、あなたのコメントでこれを指摘し@caw。これは、画像にすでに透明なピクセルがある場合に役立ちます。 -evaluate set 50%はアルファ0を持っている透明なピクセルを無くし、アルファを50%に設定します。これはしばしば望ましくありません。

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

関連する問題