ImageMagick<\/a> qui est une suite logicielle permettant de cr\u00e9er, \u00e9diter, composer et convertir des images bitmap. ImageMagick supporte plus de 100 formats de fichiers et peut \u00eatre consid\u00e9r\u00e9e comme le couteau Suisse de la manipulation d’images.<\/p>\nCeci \u00e9tant pos\u00e9, on peut faire \u00e0 peu pr\u00eat n’importe quelle manipulation d’images via une application Ruby On Rails. Nous allons voir comment.<\/p>\n
<\/p>\n
Lorsque l’on souhaite uploader des images via Paperclip, la librairie fournit nativement des \u00ab\u00a0processors\u00a0\u00bb (filtres en fran\u00e7ais) pour redimensionner les images dans une taille pr\u00e9d\u00e9finie via ImageMagick. L’exemple suivant utilise Paperclip pour ajouter une image \u00e0 un mod\u00e8le Reference.<\/p>\n
\nclass Reference < ActiveRecord::Base\n has_attached_file :image, :styles => { :normal => "300x150" }\nend\n<\/pre>\nDans cet exemple, nous avons d\u00e9fini un attribut image auquel nous appliquons un style :normal ( via le hash styles) qui retaille l’image originale en 300px par 150px.<\/p>\n
Imaginons d\u00e9sormais que dans un cas utilisateur, notre image doit non seulement \u00eatre\u00a0retaill\u00e9e en 300×150 mais aussi que ses couleurs doivent \u00eatre att\u00e9nu\u00e9es.<\/p>\n
Pour cela, nous devons cr\u00e9er un processor Grayscale dans lequel nous allons demander \u00e0 ImageMagick de faire cette manipulation. Le processor doit se trouver dans lib\/paperclip_processors et se nommer grayscale.rb.<\/p>\n
\nmodule Paperclip\n class Grayscale < Processor\n def initialize file, options = {}, attachment = nil\n super\n @file = file\n @current_format = File.extname(@file.path)\n @basename = File.basename(@file.path, @current_format)\n end\n\n def make\n dst = Tempfile.new(@basename)\n dst.binmode\n command = "-resize 300x150 -modulate 80,20,100 #{File.expand_path(@file.path)} #{File.expand_path(dst.path)}"\n\n begin\n success = Paperclip.run("convert", command)\n rescue PaperclipCommandLineError\n raise PaperclipError, "There was an error when transform in grayscale #{@basename}"\n end\n\n dst\n end\n end\nend\n<\/pre>\nCeci \u00e9tant fait, nous devons indiquer \u00e0 notre application Rails de charger les processors apr\u00e8s son d\u00e9marrage dans le fichier config\/application.rb<\/p>\n
\nconfig.after_initialize do\n Dir.glob(File.join(File.expand_path(Rails.root),'lib','paperclip_processors','*.rb')).each do |processor|\n require processor\n end\nend\n<\/pre>\nEnfin, nous devons modifier le code de notre mod\u00e8le Reference afin qu’il applique le processor Grayscale sur l’image que nous lui aurons envoy\u00e9e :<\/p>\n
\nclass Reference < ActiveRecord::Base\n has_attached_file :image, :styles => { :normal => "300x150", :grayscale => { :processors => [:grayscale] } }\nend\n<\/pre>\nD\u00e9sormais, lorsqu’une image sera upload\u00e9e pour le mod\u00e8le Reference, celle-ci sera retrait\u00e9e pour \u00eatre retaill\u00e9e pour le style :normal et modifi\u00e9e via le processor Grayscale pour le style :grayscale :<\/p>\n