【问题标题】:RMagick: How to check if all pixels in a particular area of the image are transparent?RMagick:如何检查图像特定区域中的所有像素是否都是透明的?
【发布时间】:2012-04-27 01:07:03
【问题描述】:

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

应该得到代码111-111-010

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

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

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

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

【问题讨论】:

    标签: ruby png imagemagick rmagick


    【解决方案1】:

    我会将您现有的图像缩小到 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 
    

    【讨论】:

    • 此代码生成011-111-111。看起来它错过了另一个透明点。
    猜你喜欢
    • 2012-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多