17 votes

Changer la couleur d'une image avec imagemagick

Je veux changer les couleurs de premier plan d'une image en utilisant rmagick/imagemagick. Pour être plus précis : je veux convertir les couleurs d'avant-plan d'une image à l'aide de rmagick/imagemagick. noir ou le blanc glyphicons-halflings (qui sont inclus dans twitter bootstrap) en icônes glyphicons-halflings bleu foncé. (Ce serait bien si je pouvais spécifier une couleur hexagonale ou RVB).

Je n'ai aucune idée si cela est possible, mais j'ai parcouru la documentation d'Imagemagick et la seule chose que j'ai trouvée est convert --size 100x100 xc:skyblue glyphicons-halflings.png -composite foo.png Le problème est que cela ne fonctionne que si vous spécifiez une taille et que cela change la couleur d'avant-plan et non la couleur d'arrière-plan. De plus, c'est du bleu ciel et non du bleu foncé.

Alors, quelqu'un a une idée de comment je pourrais convertir les icônes blanches ou noires de glyphicons-halflings en icônes bleues de glyphicons-halflings ? (Points bonus pour les extraits de code rmagick/ruby)

37voto

Rafael Xavier Points 656

Réponse rapide :

convert glyphicons-halflings.png -alpha extract -background blue \
-alpha shape blue-glyphicons-halflings.png

blue-glyphicons-halflings.png

Remarque : au lieu de blue vous pouvez utiliser n'importe quelle couleur nommée, ou RVB, ou RGBA, etc. http://www.imagemagick.org/script/command-line-options.php#fill ).

Explication :

Nous "colorisons" les icônes selon un processus en deux étapes :

  • Extraire le canal alpha des icônes ; (note : la couleur des icônes originales n'a pas d'importance, nous extrayons son canal alpha)
  • Appliquez le masque ci-dessus sur un fond coloré de votre choix ;

Pour plus d'informations, lisez les documents suivants :

PS : La solution ci-dessus a été recherchée lors de la mise en œuvre de la réécriture de jQuery ThemeRoller. https://github.com/jquery/download.jqueryui.com/issues/77

5voto

sguha Points 938

De http://www.imagemagick.org/Usage/color_basics/#replace vous pouvez remplacer toutes les couleurs dans l'image qui ne sont pas darkblue con darkblue avec la commande suivante :

convert glyphicons-halflings.png -fill darkblue +opaque darkblue glyphicons-halflings.png

Si vous voulez le faire en ruby, je vous recommande d'utiliser la gemme Minimagick. https://github.com/minimagic/minimagick qui appelle simplement convert sur la ligne de commande. D'après mon expérience, toutes les fonctionnalités n'ont pas été portées de la ligne de commande vers RMagick.

3voto

David Douglas Points 1410

En plus de la réponse de sguha - voici la version Ruby (bien que pour QuickMagick) :

require 'quick_magick'
source = "images/source.png"
dest = "images/saved.png"
foreground = "0000ff" #hex code for your colour

QuickMagick.exec3("convert #{source} -fill \"##{foreground}\" +opaque \"##{foreground}\" #{dest}")

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