更新回答
一個稍微簡單的方法,因爲如雨後春筍般涌現在腦海中。閱讀下面的原始答案,瞭解我在做什麼。
可以使用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
),並計數(-c
)包含單詞"Maximum:"
的行,後跟其他任何數字比零。所以,你會得到一個0或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的他們,你會看到這樣的差異:
所以,你既可以找"Type: true color with transparency"
,或看Channel Statistics->Opacity->Maximum
並檢查它是否大於零。這是有點難以尋找,因爲這個詞Opacity:
出現了兩次,但你可以用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"}'
所以,我基本上是檢查我見過"Channel Statistics:"
,其次是"Opacity:"
然後尋找"Maximum:"
和然後檢查第二列是否超過零。
希望有幫助!
我的回答是否解決了您的問題?如果是這樣,請考慮接受它作爲您的答案 - 通過點擊投票計數旁邊的空心綠色勾號/複選標記。如果沒有,請說出什麼不起作用,以便我或其他人可以進一步幫助您。謝謝。 http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work/5235#5235 –