2016-10-07 12 views
0

アルファチャンネルだけでなく、実際に画像が透明かどうかを確認しようとしています。実証するためにGraphicsMagickで画像が透明であるかどうかを検出します。

、アルファチャンネルを有しているが、完全に不透明である画像a.png、一つの半透明ピクセルを除いて同じである画像b.pngを作成することができます:

gm convert rose: PNG32:a.png

gm convert rose: -fill '#0008' -draw "matte 10,10 point" PNG32:b.png

ImageMagickを使用すると、わかりやすくわかりやすく確認できます。%[opaque]

$ identify -format '%[opaque]' a.png 
true 
$ identify -format '%[opaque]' b.png 
false 

graphicsmagickに相当するものは、%Aは、透明度がであるかどうかを確認するだけです。では画像が実際に透明ではないことを確認します。

+0

私の答えはあなたの問題を整理しましたか?もしそうなら、それをあなたの答えとして受け入れることを検討してください - 投票数の横にある緑色のチェックマーク/チェックマークをクリックしてください。そうでない場合は、私が、または他の誰かがあなたをさらに助けることができるように、何がうまくいかないと言ってください。ありがとう。 http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work/5235#5235 –

答えて

1

更新回答

は少し簡単な方法は、心に生まれて以来持っています。私がしていることを理解するために、以下の原回答をお読みください。

あなたはgmを使用してアルファ/不透明チャンネルを抽出することができ、その後、あなたは-verbose情報出力で複数のチャンネルを心配する必要はありません。今すぐ

gm convert b.png -channel opacity -verbose info:- 

サンプル出力

gm convert a.png -channel opacity -verbose info:- 
a.png PNG 70x46+0+0 DirectClass 8-bit 7.6Ki 0.000u 0m:0.000000s 
Image: a.png 
    Format: PNG (Portable Network Graphics) 
    Geometry: 70x46 
    Class: DirectClass 
    Type: grayscale 
    Depth: 1 bits-per-pixel component 
    Channel Depths: 
    Gray:  1 bits 
    Channel Statistics: 
    Gray: 
     Minimum:      0.00 (0.0000) 
     Maximum:      0.00 (0.0000) 
     Mean:      0.00 (0.0000) 
     Standard Deviation:   0.00 (0.0000) 
    Filesize: 0 
    Interlace: No 
    Orientation: Unknown 
    Background Color: white 
    Border Color: £DFDFDF 
    Matte Color: £BDBDBD 
    Page geometry: 70x46+0+0 
    Compose: Over 
    Dispose: Undefined 
    Iterations: 0 
    Compression: Zip 
    Png:IHDR.color-type-orig: 6 
    Png:IHDR.bit-depth-orig: 8 
    Signature: d7e8478261a01c7f4c4f6bbb172976d1bd585c1b43195cdb65bafb008f71b5c6 
    Tainted: True 
a.png INFO 70x46+0+0 DirectClass 8-bit 0.000u 0m:0.010000s 

単純に(grep)を探して、"Maximum:"という文字列の後に任意の数字が続く行を数える(-c)ことができますゼロよりも。だから、出力として、ゼロまたは1(-m1)を取得します:

gm convert b.png -channel opacity -verbose info:- 2>&1 | grep -c -m1 "Maximum:.*[1-9]" 

オリジナル回答を

うーん、GraphicsMagickのは多くの点ではImageMagickやや発展途上以上です!

いくつかのアイデアが思い浮かぶ。あなたが実行した場合:

gm identify -verbose a.png > a.txt 
gm identify -verbose b.png > b.txt 

をし、それらをdiffを、あなたはこのような違いが表示されます:だから

enter image description here

、あなたはどちらか"Type: true color with transparency"を探し、またはChannel Statistics->Opacity->Maximumを見て、それかどうかを確認できました0より大きい。それは言葉Opacity:が2回出現するので、検索するためにやや難しいですが、あなたは、このようなawkでそれを行うことができます。

gm identify -verbose a.png | awk '/Channel Statistics:/{f=1} (f==1)&&/Opacity:/{f=2} (f==2)&&/Maximum:/&&($2>0.00){print "Non-opaque pixel found"}' 

だから、私は基本的に私は"Opacity:"が続いた後、"Maximum:"と探し、"Channel Statistics:"を見てきましたチェックしています2番目の列がゼロを超えているかどうかを確認します。

希望に役立ちます!

関連する問題