我想从给定的图像创建代码。例如,这张图片:
应该获取代码111-111-010
。
(假设它是png
图像,除香蕉本身以外的所有像素都是透明的。)
如果特定方块中的所有像素都是透明的,则此方块的值为0
,否则为1
。
因此,给定图像,我想将其划分为给定大小的正方形(例如,香蕉图像为300x300
像素,正方形为100x100
),然后创建一个代码(字符串),如上所述构建。
最简单的方法可能是使用each_pixel
,只需手动检查方块中的所有像素是否透明。有更好的方法吗?
答案 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