4 votes

Pixel RGB avec ImageMagick et Rails

Je suis en train de télécharger une image avec PaperClip et ImageMagick. Je voudrais obtenir la couleur moyenne de l'image et je fais donc ceci (avec un crochet 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 

Cela fonctionne mais lorsque j'essaie d'imprimer les couleurs des pixels, je les obtiens comme ceci :

red=36722, green=44474, blue=40920, opacity=0 

Comment puis-je transformer ces valeurs RVB en valeurs RVB normales (0-255) ? Dois-je simplement les modifier ? Merci d'avance.

3voto

user1823890 Points 349

Si ImageMagick est compilé avec une profondeur quantique de 16 bits, et que vous avez besoin des valeurs de 8 bits, vous pouvez utiliser l'opération bitwise :

r_8bit = r_16bit & 255;
g_8bit = g_16bit & 255;
b_8bit = b_16bit & 255;

Les opérations par bit sont beaucoup plus rapides ;)

Vous pouvez aussi utiliser cette méthode :

IMAGE_MAGICK_8BIT_MASK = 0b0000000011111111
r_8bit = (r_16bit & IMAGE_MAGICK_8BIT_MASK)
...

Maintenant, un peu de maths :

x_16bit = x_8bit*256 + x_8bit = x_8bit<<8 | x_8bit

2voto

Serhii Nadolynskyi Points 4725

Vous pouvez facilement obtenir une couleur codée sur 8 bits en utilisant cette approche :

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

Vous pouvez obtenir plus de détails à l'adresse suivante https://rmagick.github.io/struct.html (paragraphe to_color)

1voto

Yardboy Points 1981

Votre ImageMagick est compilé pour une profondeur quantique de 16 bits, au lieu de 8 bits. Voir cet article dans le forum RMagick Hints & Tips pour plus d'informations.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X