RMagick:如何检查图像特定区域中的所有像素是否透明?

时间:2012-04-15 11:32:05

标签: ruby png imagemagick rmagick

我想从给定的图像创建代码。例如,这张图片:

enter image description here

应该获取代码111-111-010

(假设它是png图像,除香蕉本身以外的所有像素都是透明的。)

如果特定方块中的所有像素都是透明的,则此方块的值为0,否则为1

因此,给定图像,我想将其划分为给定大小的正方形(例如,香蕉图像为300x300像素,正方形为100x100),然后创建一个代码(字符串),如上所述构建。

最简单的方法可能是使用each_pixel,只需手动检查方块中的所有像素是否透明。有更好的方法吗?

1 个答案:

答案 0 :(得分:0)

我会将您现有的图像缩小到3x3尺寸:

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

然后,您可以使用以下方法检查每个剩余像素来创建代码:

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进行比较,因为当我检查了一个我知道透明的像素时,这就是返回的内容:

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