Améliorer ses photos avec Gimp sous MacOS

Depuis 3 ans maintenant, à chaque retour de vacances, un des tâches est le traitement des photos afin de les améliorer (balance des blancs, amélioration de la netteté et équilibre des couleurs). Adepte des logiciels libres, j’ai depuis longtemps adopté Gimp comme outil officiel pour les retouches photos et je passe toujours par sa ligne de commande pour traiter les 3000 photos
Le résultat est relativement correct et Gimp est largement suffisant pour mes besoins.
Sous Windows
Le script Gimp, version 1
Ce résultat a été obtenu avec les scripts suivants pour Windows. Le 1er script (batch-photos-nett-coul-auto.scm) est le script Gimp qui charge les photos et les traite :
1 |
(define (batch-unsharp-mask pattern) ; charge les images correspondant au pattern donné (let* ((filelist (cadr (file-glob pattern 1)))) ; parcourt la liste des fichiers trouvés (while (not (null? filelist)) (let* ((filename (car filelist)) (image (car (gimp-file-load 1 filename filename))) (drawable (car (gimp-image-get-active-drawable image)))) ; ameliore la nettete de l'image - NETT (plug-in-unsharp-mask 1 image drawable 5.0 0.5 0) ; fait la balance auto. des blancs - AUTO ;(gimp-levels-stretch drawable) ; ameliore les couleurs de l'image - COUL (plug-in-color-enhance 1 image drawable ) ; sauvegarde de l'image (set! drawable (car (gimp-image-get-active-layer image))) (gimp-file-save 1 image drawable filename filename) (gimp-image-delete image)) (set! filelist (cdr filelist))) ) ) |
Le Script Shell, version Windows
Le 2ème script (call-batch-gimp.sh) parcourt les dossiers (utile si les photos sont triées par répertoire) et appelle le script Gimp sur les différents dossiers (les 2 scripts sont dans le même répertoire) :
1 |
GIMPPATH="C:/Program Files/GIMP-2.0/bin" GIMPEXE=gimp-console-2.6.exe WORK_DIR=C:/MesPhotos/Lot1 DIRS=`find $WORK_DIR -name "*" -type d` LOG=C:/MesPhotos/logGimp.txt if [ ! -f "$GIMPPATH/$GIMPEXE" ]; then echo "$GIMPEXE" not exists exit 1 fi rm -f $LOG for DIR in $DIRS; do cd $DIR if [ $? == 0 ]; then echo ============================================= echo Call gimp batch on $DIR $GIMPPATH/$GIMPEXE -c -d -f -s --no-shm -i -b "(batch-unsharp-mask \"*.JPG\")" ERRORLEVEL=$? echo ERRORLEVEL: $ERRORLEVEL echo echo ============================================= if [ $ERRORLEVEL != 0 ]; then echo Error in $DIR >> $LOG fi fi done |
Ensuite, il suffit de lancer via la ligne de commande le Shell script ci-dessus pour traiter toutes les photos dans le répertoire C:/MesPhotos/Lot1.
- : cette solution nécessite un environnement Linux sous Windows, de type Cygwin
Sous MacOS
Suite à une “migration” de Windows vers MacOS, j’ai bien entendu réinstallé Gimp sur Mac et lancé mes p”tits scripts pour traiter mes photos. Hélas, hélas, hélas, il m’a fallu quelques heures avant de trouver comment faire pour que cela fonctionne et les adaptations nécessaires aux scripts. Les problèmes rencontrés ont été les suivants :
- Le binaire gimp-console-2.6.exe n’existe plus sous MacOS et MacOS présente des applications contenant toutes les ressources (il faut penser à ouvrir l’application via un clic droit pour voir le contenu); désormais, le chemin vers l’exécutable est /Applications/Gimp.app/Contents/Resources/bin et non plus C:/Program Files/GIMP-2.0/bin
- Lors du lancement de Gimp en ligne de commande, Gimp utilise les fonctions uniquement définies et enregistrées et “ne pense pas” à regarder le répertoire courant pour charger la nouvelle fonction dans le script Gimp. Il faut donc déclarer la fonction contenue dans le script au préalable et ensuite appeler la fonction avec les paramètres souhaitées.
- L’appel au script Gimp via le script Shell est légèrement modifié, on passe en mode lecture sur la ligne de commande
Voici donc la solution que j’ai trouvé
Le script Gimp, version 2
On prend le même et on lui rajoute 2 lignes uniquement à la fin du fichier pour que tout fonctionne correctement :
1 |
; appelle la fonction batch-unsharp-mask avec le pattern souhaité (batch-unsharp-mask "*.JPG") ; finit le bloc et quitte le script (gimp-quit 0) |
Ça peut paraitre tout bête mais c’est 2 lignes m’ont énormément coûté en temps.
Le script Shell, sous MacOS
1 |
GIMPPATH=/Applications/Gimp.app/Contents/MacOS GIMPEXE=gimp-2.8 DIR="/Users/admin/Pictures/to_batch/*" SCRIPT=/Users/admin/Pictures/scriptsGimp/batch-gimp.scm DIRS=`find $DIR -name "*" -type d -exec echo "{}:" ';'` PATH=$GIMPPATH:$PATH LOG=$DIR/logGimp.txt DIRS=`echo $DIRS | sed "s/: /:/g"` echo DIRS $DIRS if [ ! -f "$GIMPPATH/$GIMPEXE" ]; then echo "$GIMPEXE" can not be found exit 1 fi which $GIMPEXE if [ $? == 1 ]; then echo "$GIMPEXE" can not be found exit 1 fi echo "Gimp has been found; continue process..." rm -f $LOG IFS=':' for DIR in $DIRS; do echo "cd $DIR" cd "$DIR" FILES=`ls *.JPG 2> /dev/null` if [ $? == 0 ]; then echo ============================================= echo Call gimp batch on $DIR "$GIMPPATH/$GIMPEXE" -c -d -f -s -i -b - < $SCRIPT ERRORLEVEL=$? echo ERRORLEVEL: $ERRORLEVEL echo echo ============================================= if [ $ERRORLEVEL != 0 ]; then echo Error in $DIR >> $LOG fi fi done echo "Process is over" |
Rien de bien sorcier mais il faut le savoir et y penser. Et on n’oublie pas de donner les droits d’exécution au script sh pour pouvoir l’exécuter sous MacOS