Traitement batch avec The Gimp pour la conversion de fichiers
Pour la conversion de format graphique j'utilise habituellement ImageMagick et une petite boucle for de Bash. Malheureusement, il existe des formats de fichiers que les outils ImageMagick ne peuvent pas manipuler. C'est le cas des Motifs (patterns) utilisés par The Gimp. Il faut alors se tourner vers The Gimp lui-même et l'utiliser en mode non interactif, le mode batch.
The Gimp peut s'utiliser depuis la ligne de commande et sans interface (donc sans X et ses tonnes de bibliothèques et autres fichiers). On utilise la commande gimp avec les options -i, -c et -b, respectivement pour désactiver l'interface graphique, afficher les messages sur la console et non dans des boîtes de dialogue et pour prendre en argument une procédure en mode batch.
Pour la conversion des .pat en JPEG, il faut ensuite créer une procédure adaptée qu'on placera dans un fichier dans son ~/.gimp-2.2/scripts :
(define (patconv infile
outfile
)
(let*
)
(drawable (car (gimp-image-get-active-layer img)))
)
(gimp-message-set-handler 1)
(gimp-file-save RUN-NONINTERACTIVE img drawable outfile outfile)
(gimp-image-delete img)
))
La procédure accepte en argument un nom de fichier en entrée et un nom de fichier en sortie. Elle ouvre le fichier d'entrée, récupère le drawable nécessaire pour la procédure d'enregistrement puis, enregistre le fichier de sortie et détruit l'image.
Il suffit ensuite d'utiliser la commande :
gimp -i -c -b "(patconv \"wax.pat\" \"wax.jpg\")" "(gimp-quit 0)"
Notez qu'il faut échapper les " et utiliser la procédure (gimp-quit 0) dans l'argument et non dans la procédure stockée dans le fichier.
Pour boucler sur les fichiers dans un répertoire, le shell est mis à contribution :
mkdir JPG for i in `/bin/ls *.pat` do gimp -i -c -b "(patconv \"$i\" \"JPG/`basename $i .pat`.jpg\")" "(gimp-quit 0)" done
Et voilà un répertoire JPG plein de JPEG. Pour récupérer le nom des motifs, la commande file est notre amie.