我目前正在使用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值。我只是修改它们吗?提前谢谢。
答案 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段落)
获取更多详细信息