【问题标题】:Pixel RGB with ImageMagick and Rails使用 ImageMagick 和 Rails 的像素 RGB
【发布时间】:2011-06-27 21:29:22
【问题描述】:

我目前正在使用 PaperClip 和 ImageMagick 上传图片。我想获得图像的平均颜色,所以我这样做(使用 before_create 钩子):

def get_average_color           
    img =  Magick::Image.read(self.url).first
    pix = img.scale(1, 1)
    averageColor = pix.pixel_color(0,0)
end 

这可行,但是当我尝试打印像素颜色时,我会得到这样的结果:

red=36722, green=44474, blue=40920, opacity=0 

如何将这些 RGB 值转换为常规 (0-255) RGB 值。我只是修改它们吗?提前致谢。

【问题讨论】:

    标签: ruby imagemagick paperclip rmagick


    【解决方案1】:

    如果 ImageMagick 使用 16 位的量子深度编译,并且您需要 8 位值, 你可以使用按位运算:

    r_8bit = r_16bit & 255;
    g_8bit = g_16bit & 255;
    b_8bit = b_16bit & 255;
    

    按位运算要快得多;)

    你也可以这样使用:

    IMAGE_MAGICK_8BIT_MASK = 0b0000000011111111
    r_8bit = (r_16bit & IMAGE_MAGICK_8BIT_MASK)
    ...
    

    现在有点数学:

    x_16bit = x_8bit*256 + x_8bit = x_8bit<<8 | x_8bit
    

    【讨论】:

      【解决方案2】:

      您可以使用这种方法轻松获得 8 位编码颜色:

      averageColor = pix.pixel_color(0,0).to_color(Magick::AllCompliance, false, 8, true)
      

      您可以在https://rmagick.github.io/struct.html(to_color 段落)获取更多详细信息

      【讨论】:

        【解决方案3】:

        您的 ImageMagick 被编译为 16 位的量子深度,而不是 8 位。有关详细信息,请参阅 RMagick 提示和提示论坛中的 this article

        【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-11-05
        • 2012-06-19
        • 2016-04-24
        • 1970-01-01
        相关资源
        最近更新 更多