16 Couleurs

16 Couleurs – graphisme & jeu vidéo

Automatiser la création d’images avec ImageMagick et Python

2 Commentaires

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 :

Images générées avec ImageMagick et Python

ImageMagick-wizardImageMagick 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.

Auteur : HP

Professionnel de l'industrie vidéoludique depuis 14 ans, j'écris principalement sur l'infographie, le business des jeux vidéo et la demoscene.

2 réflexions sur “Automatiser la création d’images avec ImageMagick et Python

  1. 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😉

    • 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.

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s