在Ruby中逐个像素地读取图像

And*_*s H 11 ruby imagemagick heroku sinatra

我正在尝试打开一个图像文件,并在变量/数组中按颜色存储像素列表,这样我就可以逐个输出它们.

图像类型:可以是BMP,JPG,GIF或PNG.其中任何一个都很好,只需要支持一个.颜色输出:RGB或Hex.

我看过几个库(RMagick,Quick_Magick,Mini_Magick等),它们看起来都有些过分.Heroku在ImageMagick上也遇到了一些困难,我的测试也没有运行.我的申请是在Sinatra.

有什么建议?

Ale*_*lex 14

您可以使用Rmagickeach_pixel这种方法.each_pixel接收一个块.对于每个像素,块传递像素,列号和像素的行号.它从左到右和从上到下迭代像素.

所以类似于:

pixels = []

img.each_pixel do |pixel, c, r|
    pixels.push(pixel)
end
# pixels now contains each individual pixel of img
Run Code Online (Sandbox Code Playgroud)

  • 对于大图像,这种方法可能会非常慢.更快的方法是使用`img.export_pixels_to_str`然后从结果字符串中提取单个像素. (5认同)
  • @Phogz所以你downvote?即使OP确定它是过度杀伤,但并不意味着它是.如果他们*真的知道他们需要什么,他们就不会问.这个答案是正确的,并做了所要求的. (3认同)

Phr*_*ogz 14

我认为Chunky PNG应该为你做.它是纯粹的红宝石,相当轻巧,内存效率高,并且可以访问像素数据和图像元数据.

  • @Alex我认为你误读了OP.它说"其中任何一个都很好,只需要支持一个".我认为这意味着OP将使用基于库的最简单的格式. (4认同)