Pixel RGB с ImageMagick и Rails - PullRequest
       60

Pixel RGB с ImageMagick и Rails

4 голосов
/ 28 июня 2011

Я сейчас загружаю изображение с помощью 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 ]

3 голосов
/ 24 июня 2014

Если 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
1 голос
/ 10 июля 2017

Вы можете легко получить 8-битный кодированный цвет, используя этот подход:

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

Более подробную информацию можно получить по адресу https://rmagick.github.io/struct.html (абзац to_color)

1 голос
/ 28 июня 2011

Ваш ImageMagick скомпилирован для квантовой глубины 16 бит по сравнению с 8 битами. См. эту статью на форуме RMagick Hints & Tips для получения дополнительной информации.

...