Certains projets peuvent nécessiter la création d’un grand nombre d’images qui ne se différencient que par le texte ou symbole qui y est surimposé. L’exemple typique est une série d’images représentant des « achievements » ou destinées à être partagées sur les réseaux sociaux, telle que celle que j’ai réalisées récemment pour notre projet « Test your memory » chez Peak :
ImageMagick est une sorte de couteau suisse du traitement d’image gratuit et open-source. Outre les fonctions de conversion (plus de 200 formats supportés), la modification d’images (redimensionnement, rotation, ajouts de texte ou d’éléments graphiques, modification des couleurs…) ou même leur génération complète sont les principaux usages de l’outil. On peut par exemple facilement écrire un script qui redimensionnera une image à 50%, y ajoutera un logo et sauvera le tout en JPEG de qualité 60%. Pratique pour préparer des photos pour un blog, par exemple.
Généralement contrôlé en ligne de commande, ImageMagick est ardu à l’utilisation et nécessite souvent de nombreux essais/erreurs mais la documentation très détaillée et les exemples fournis aident beaucoup. Je m’en suis ici servi pour ajouter deux lignes de texte sur une image existante.
S’il ne semble pas possible d’itérer sur du texte directement, il est par contre possible de contrôler ImageMagick directement dans Python avec une librairie dédiée (PythonMagick) mais l’installation de celle-ci semble trop complexe pour le commun des mortels. La solution que j’ai retenue a été d’utiliser Python uniquement pour générer un fichier .BAT qui permet à ImageMagick de créer les images. Quelques lignes suffisent :
# Generates a batch file for ImageMagick to create 93 FB share pictures f = open("FBShare.bat","w") for number in range (1,16): f.write('convert c:\Utils\ImageMagick\images\FBShareBG.png -font c:\Windows\Fonts\GothamSSm-Bold.otf ' '-fill white -pointsize 168 -gravity center -annotate +0-60 "TOP ' + str(number) + '%%" ' '-font c:\Windows\Fonts\GothamSSm-Bold.otf -fill white -pointsize 120 -gravity center ' '-annotate +0+70 "MEMORY" c:\Utils\ImageMagick\images\FBShare' + str(number) + '.png' + '\n') for number in range (18,94): f.write('convert c:\Utils\ImageMagick\images\FBShareBG.png -font c:\Windows\Fonts\GothamSSm-Bold.otf ' '-fill white -pointsize 110 -gravity center -annotate +0-72 "MY BRAIN AGE:" ' '-font c:\Windows\Fonts\GothamSSm-Bold.otf -fill white -pointsize 140 -gravity center ' '-annotate +0+60 ' + '"' + str(number) + ' YEARS OLD" ' 'c:\Utils\ImageMagick\images\FBShare' + str(number) + '.png' + '\n') f.write('PAUSE')
On obtient alors un fichier batch avec les instructions nécessaires à la création des 91 images :
convert c:\Utils\ImageMagick\images\FBShareBG.png -font c:\Windows\Fonts\GothamSSm-Bold.otf -fill white -pointsize 168 -gravity center -annotate +0-60 "TOP 1%%" -font c:\Windows\Fonts\GothamSSm-Bold.otf -fill white -pointsize 120 -gravity center -annotate +0+70 "MEMORY" c:\Utils\ImageMagick\images\FBShare1.png convert c:\Utils\ImageMagick\images\FBShareBG.png -font c:\Windows\Fonts\GothamSSm-Bold.otf -fill white -pointsize 168 -gravity center -annotate +0-60 "TOP 2%%" -font c:\Windows\Fonts\GothamSSm-Bold.otf -fill white -pointsize 120 -gravity center -annotate +0+70 "MEMORY" c:\Utils\ImageMagick\images\FBShare2.png convert c:\Utils\ImageMagick\images\FBShareBG.png -font c:\Windows\Fonts\GothamSSm-Bold.otf -fill white -pointsize 168 -gravity center -annotate +0-60 "TOP 3%%" -font c:\Windows\Fonts\GothamSSm-Bold.otf -fill white -pointsize 120 -gravity center -annotate +0+70 "MEMORY" c:\Utils\ImageMagick\images\FBShare3.png [...] convert c:\Utils\ImageMagick\images\FBShareBG.png -font c:\Windows\Fonts\GothamSSm-Bold.otf -fill white -pointsize 168 -gravity center -annotate +0-60 "TOP 15%%" -font c:\Windows\Fonts\GothamSSm-Bold.otf -fill white -pointsize 120 -gravity center -annotate +0+70 "MEMORY" c:\Utils\ImageMagick\images\FBShare15.png convert c:\Utils\ImageMagick\images\FBShareBG.png -font c:\Windows\Fonts\GothamSSm-Bold.otf -fill white -pointsize 110 -gravity center -annotate +0-72 "MY BRAIN AGE:" -font c:\Windows\Fonts\GothamSSm-Bold.otf -fill white -pointsize 140 -gravity center -annotate +0+60 "18 YEARS OLD" c:\Utils\ImageMagick\images\FBShare18.png convert c:\Utils\ImageMagick\images\FBShareBG.png -font c:\Windows\Fonts\GothamSSm-Bold.otf -fill white -pointsize 110 -gravity center -annotate +0-72 "MY BRAIN AGE:" -font c:\Windows\Fonts\GothamSSm-Bold.otf -fill white -pointsize 140 -gravity center -annotate +0+60 "19 YEARS OLD" c:\Utils\ImageMagick\images\FBShare19.png convert c:\Utils\ImageMagick\images\FBShareBG.png -font c:\Windows\Fonts\GothamSSm-Bold.otf -fill white -pointsize 110 -gravity center -annotate +0-72 "MY BRAIN AGE:" -font c:\Windows\Fonts\GothamSSm-Bold.otf -fill white -pointsize 140 -gravity center -annotate +0+60 "20 YEARS OLD" c:\Utils\ImageMagick\images\FBShare20.png [...] convert c:\Utils\ImageMagick\images\FBShareBG.png -font c:\Windows\Fonts\GothamSSm-Bold.otf -fill white -pointsize 110 -gravity center -annotate +0-72 "MY BRAIN AGE:" -font c:\Windows\Fonts\GothamSSm-Bold.otf -fill white -pointsize 140 -gravity center -annotate +0+60 "93 YEARS OLD" c:\Utils\ImageMagick\images\FBShare93.png PAUSE
Le gros avantage de cette méthode est la flexibilité qu’elle apporte. Jean-Christian Ranu préfère le fond en rose ? Berthier de la compta veut une version avec le texte en breton ? Inutile de commencer à transpirer à gros bouillons, en deux minutes c’est réglé.
Combiné à Python ou tout autre langage de programmation, les possibilités offertes par ImageMagick sont très vastes. On peut par exemple introduire un facteur aléatoire qui permettra par exemple d’alterner entre différentes images de fond, introduire des règles plus complexes, comme une taille de fonte différente tous les n images ou même générer des frames pour une animation.
6 juillet 2015 à 08:45
Il y a aussi l’outil « fab » qui permet de faire des choses intéressantes: http://abrobecker.free.fr/fab/fab.htm (un peu plus orienté génération d’images que retouches et transformations)
Avec des exemples qui me rapellent quelque chose 😉
6 juillet 2015 à 23:10
Très juste ! Alain m’en avait parlé et j’avais même fait des essais avec il y a quelques temps… Fab a l’air vraiment puissant pour la génération d’images effectivement, beaucoup de possibilités en particulier avec les fonctions de dithering custom.
Pingback: Des exemples d’automatisation de traitement d’images avec ImageMagick | 16 Couleurs