Mr_*_*zle 13 ruby rmagick imagemagick image-processing
当我将它上传到Ruby on Rails应用程序时,我需要知道图像的平均颜色.是否可以在HEX或RGB中获得平均颜色值,以便稍后在将要显示此图像的视图中使用此颜色?
就像是:
img = Magick::Image.read(path).first
hexVal = img.getHexValue
Run Code Online (Sandbox Code Playgroud)
ste*_*tef 22
将图像调整为一个像素并获得其颜色?
img = Magick::Image.read(path).first
pix = img.scale(1, 1)
averageColor = pix.pixel_color(0,0)
Run Code Online (Sandbox Code Playgroud)
mu *_*ort 19
我不认为你可以直接询问RMagick图像的平均颜色,但计算这样的东西并不困难.
我认为最简单的方法是提取颜色直方图,然后用它来计算你的平均值.您可能希望首先量化图像,但计算具有大量颜色的图像的直方图并不便宜,如果您只对平均值感兴趣,则可能无意义的繁忙工作:
total = 0
avg = { :r => 0.0, :g => 0.0, :b => 0.0 }
img.quantize.color_histogram.each { |c, n|
avg[:r] += n * c.red
avg[:g] += n * c.green
avg[:b] += n * c.blue
total += n
}
[:r, :g, :b].each { |comp| avg[comp] /= total }
Run Code Online (Sandbox Code Playgroud)
这将给你平均颜色avg
.但是,颜色将采用ImageMagick的内部格式(即组件的范围从零到Magick::QuantumRange
),因此您必须将它们缩小到0-255:
[:r, :g, :b].each { |comp| avg[comp] = (avg[comp] / Magick::QuantumRange * 255).to_i }
Run Code Online (Sandbox Code Playgroud)
最后,您将RGB组件avg
作为0到255之间的整数,并且以十六进制格式获得平均颜色应该是微不足道的.如果需要,您可以轻松地将其合并到平均步骤中.
我可能对迭代器更聪明,但是.each
很好而且清晰,清晰度比聪明更重要.
您也可以尝试使用和不使用量化步骤,并使用最适合您正在使用的图像.
归档时间: |
|
查看次数: |
7225 次 |
最近记录: |