creo que no se puede pedir una imagen RMagick por su color medio directamente, sino calculando tal cosa no es tan difícil.
Creo que la manera más fácil sería para extraer el color histogram y luego utilizar eso para calcular el promedio. Usted probablemente querrá quantize la imagen primero sin embargo, calcular el histograma de una imagen con una gran cantidad de colores no es trabajo ocupado barato y probablemente inútil si sólo está interesado en un promedio:
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 }
Eso ll darle el color promedio en avg
. Sin embargo, el color será en formato interno de ImageMagick (es decir, los componentes van desde cero a Magick::QuantumRange
) por lo que tendrá que escalar hacia abajo a 0-255:
[:r, :g, :b].each { |comp| avg[comp] = (avg[comp]/Magick::QuantumRange * 255).to_i }
Y, finalmente, tener los componentes RGB en avg
como enteros entre cero y 255 y obtener el color promedio en formato hexadecimal debe ser trivial. Podría combinar fácilmente esto en el paso de promediado si así lo desea.
probablemente podría ser más inteligente con los iteradores, pero .each
es agradable y claro y la claridad es más importante que la inteligencia.
También puede probar con y sin la etapa de cuantificación y usar en cada uno funciona mejor para las imágenes que se está trabajando.
Como le pregunté en su [pregunta relacionada usando JavaScript] (http://stackoverflow.com/questions/ 5162828/how-to-get-the-average-or-main-color-from-an-image-with-javascript): "¿Desea solamente el color exacto del píxel o dentro de un rango de HSV en particular? Sugiera que este último le servirá mejor.) " – Phrogz