2012-04-15 54 views
0

我想從給定的圖像創建代碼。例如,這一形象:RMagick:如何檢查圖像特定區域中的所有像素是否透明?

enter image description here

應該得到的代碼111-111-010

(假設這是一個png圖像和除香蕉所有像素本身是透明的。)

如果特定方的所有像素都是透明的,這方的值爲0,否則其1。所以,給定一幅圖像,我想將它分成給定大小的正方形(例如香蕉圖像是300x300像素,正方形是100x100),然後創建一個代碼(字符串)如上所述。

最簡單的方式很可能是通過使用each_pixel,只是手動檢查若在一個方方正正的所有像素都是透明的。有更好的方法嗎?

回答

0

我會採取現有的圖像,並將其縮小到3×3大小:

code = "" 
(0..2).each do |ix| 
    (0..2).each do |iy| 
    code += play.pixel_color(ix,iy).opacity == 65535 ? "0" : "1" 
    code += iy == 2 ? "-" : "" unless ix == 2 && iy == 2 
    end 
end 

我比較不透明度改爲65535

play = image.resize(3, 3, CubicFilter, 0.5) 

然後,您可以通過使用檢查每個剩餘像素創建代碼因爲當我檢查一個像素,我知道是透明的,這是什麼返回:

=> red=65535, green=65535, blue=65535, opacity=65535 
+0

This co德產生'011-111-111'。看起來它錯過了其他透明點。 – 2012-04-22 03:24:54

相關問題