0

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

在此处输入图像描述

应该得到代码111-111-010

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

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

所以,给定一个图像,我想把它分成给定大小的正方形(例如香蕉图像是300x300像素,正方形是100x100),然后创建一个如上所述构建的代码(字符串)。

最简单的方法可能是使用each_pixel并手动检查正方形中的所有像素是否都是透明的。有没有更好的方法?

4

1 回答 1

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 
于 2012-04-16T03:28:10.987 回答