2016-10-07 51 views
0

我試圖檢查圖像是否實際上是透明的,而不僅僅是檢查Alpha通道。檢測圖像在GraphicsMagick中是否透明

爲了演示,讓創建具有alpha通道但是完全不透明的圖像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),並計數(-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的他們,你會看到這樣的差異:

enter image description here

所以,你既可以找"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:"和然後檢查第二列是否超過零。

希望有幫助!