2014-11-03 60 views
0

使用ImageMagick可以輕鬆確定圖像是否具有超出透明度的任何實際內容嗎?使用ImageMagick確定圖像內容

後面的故事是我正在裁剪一個未知內容的圖像,但已知的區域地圖(想想遊戲皮膚)。我正在裁剪的部分區域將包含或不包含的內容。如果它包含某些東西,我需要對它做些什麼。如果沒有,我需要取消它並繼續前進。謝謝!

+0

你是什麼意思「100%以上的透明度」?如何能超過100%透明? – 2014-11-03 04:32:05

+0

哈哈,我猜想糟糕的措辭。赦免。我指的是任何內容,而不是簡單的透明度。順便說一下,偉大的名字,@RiciculatedSpline。 – slant 2014-11-03 05:35:32

回答

1

我有幾個想法,你可以嘗試,但我沒有看到你的圖像,所以你需要測試它們。

首先,你可以指望的顏色數量的圖像,像這樣:

identify -format "%[k]" input.png 

如果只有透明度,顏色數爲1,如果有其他顏色的圖像中,它會比一個更大。這不能區分純粹的單色圖像和純透明圖像。這可能會或可能不會成爲問題。我不說話紅寶石,但我相信你訪問k像這樣的紅寶石:

image["%[k]"] 

其次,你可以計算出圖像的平均像素顏色,就像這樣:

identify -format "%[mean]" input.png 

這會在全透明圖像的情況下爲零。然而,對於完全黑色的圖像也是零,這可能是也可能不是問題。

這兩個參數也可以使用

identify -verbose input.png 

如果你想要一個更強大的測試,例如完全trasnparent圖像和全黑圖像之間進行區分看出,你可以使用其中一個測試的上方,並且與得到在圖像的左上角的單個像素的值結合起來以排除上述奇數邊緣的情況下,像這樣:

convert black.png -format "%[pixel:p{0,0}]" info: 
black 

convert transparent.png -format "%[pixel:p{0,0}]" info: 
none 

另一種選擇是計算直方圖的,像這樣,看顏色:

convert input.png -format %c histogram:info:- 
+0

儘管我最終在這裏尋找單步解決方案,但使用ImageMagick可能並不存在。爲此,這是實現我所尋找的一種方式,所以我會接受這個作爲這個問題的答案。我非常感謝幫助。如果其他人有另一種更直接的方式來完成這個任務,請告訴我。 – slant 2014-11-10 00:09:20

0

我結束了使用下面的代碼:

def transparent? image 
    solid_color = image['%[mean]'].to_i == 0 # transparent or solid color 
    not_opaque = !image['%[opaque]'].to_bool # no transparency remaining 
    solid_color && not_opaque 
end 

image['%[mean]']給我0爲單色或全透明,馬克瑟特查提及。這讓我陷入了一半。爲了確定單色是否透明,我使用了image['%[opaque]']。如果這是「真實的」,那麼它是一種顏色。否則,透明。 .to_bool方法只需要生成的布爾字符串並將其轉換爲實際的布爾值。

我希望這可以幫助別人!並且再次感謝這個重要的開始,Mark!