带有ImageMagick和Rails的像素RGB

时间:2011-06-27 21:29:23

标签: ruby imagemagick paperclip rmagick

我目前正在使用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值。我只是修改它们吗?提前谢谢。

3 个答案:

答案 0 :(得分:3)

如果使用16位的量子深度编译ImageMagick,并且您需要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

答案 1 :(得分:1)

您的ImageMagick编译为16位的量子深度,而不是8位。请参阅RMagick提示中的this article&amp;提示论坛了解更多信息。

答案 2 :(得分:1)

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

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

您可以在https://rmagick.github.io/struct.html(to_color段落)

获取更多详细信息