Recherche de site Web

Écrivez des scripts GIMP pour accélérer le traitement des images


Apprenez le langage de script de GIMP, Script-Fu, en ajoutant un effet à un lot d'images.

Il y a quelque temps, j'ai voulu donner un aspect tableau noir à une équation écrite. J'ai commencé à jouer avec le programme de manipulation d'images GNU (GIMP) et j'ai été satisfait du résultat. Le problème était que je devais effectuer plusieurs actions sur l'image, je voulais réutiliser ce style et je ne voulais pas répéter les étapes pour toutes les images. En plus, j'étais sûr que je les oublierais en un rien de temps.

(Cristiano Fontana, CC BY-SA 4.0)

GIMP est un excellent éditeur d'images open source. Bien que je l'utilise depuis des années, je n'avais jamais étudié ses capacités de traitement par lots ni son menu Script-Fu. C'était l'occasion idéale de les explorer.

Qu’est-ce que Script-Fu ?

Script-Fu est le langage de script intégré à GIMP. Il s'agit d'une implémentation du langage de programmation Scheme. Si vous n'avez jamais utilisé Scheme, essayez-le, car il peut être très utile. Je pense que Script-Fu est une excellente façon de commencer car il a un effet immédiat sur le traitement de l'image, ce qui permet de se sentir productif très rapidement. Vous pouvez également écrire des scripts en Python, mais Script-Fu est l'option par défaut.

Pour vous aider à vous familiariser avec Scheme, la documentation de GIMP propose un didacticiel approfondi. Scheme est un langage de type Lisp, donc une caractéristique majeure est qu'il utilise une notation de préfixe et de nombreuses parenthèses. Les fonctions et opérateurs sont appliqués à une liste d'opérandes en les préfixant :

(function-name operand operand ...)

(+ 2 3)
↳ Returns 5

(list 1 2 3 5)
↳ Returns a list containing 1, 2, 3, and 5

Il m'a fallu un certain temps pour trouver la documentation sur la liste complète des fonctions de GIMP, mais c'était en fait simple. Dans le menu Aide, il y a un Navigateur de procédures avec une documentation très complète et détaillée sur toutes les fonctions possibles.

Navigateur de procédures GIMP (Cristiano Fontana, CC BY-SA 4.0)

Accéder au mode batch de GIMP

Vous pouvez exécuter GIMP avec le mode batch activé en utilisant l'option -b. L'argument de l'option -b peut être le script que vous souhaitez exécuter ou un tiret (-) qui permet de lancer GIMP en mode interactif au lieu de la ligne de commande. Normalement, lorsque vous démarrez GIMP, il charge son interface utilisateur graphique (GUI), mais vous pouvez la désactiver avec l'option -i.

Écrire votre premier scénario

Créez un fichier appelé chalk.scm et enregistrez-le dans le dossier scripts trouvé dans la fenêtre Préférences sous Dossiers → Scripts . . Dans mon cas, c'est à $HOME/.config/GIMP/2.10/scripts.

Dans le fichier chalk.scm, écrivez votre premier script avec :

(define (chalk filename grow-pixels spread-amount percentage)
   (let* ((image (car (gimp-file-load RUN-NONINTERACTIVE filename filename)))
          (drawable (car (gimp-image-get-active-layer image)))
          (new-filename (string-append "modified_" filename)))
     (gimp-image-select-color image CHANNEL-OP-REPLACE drawable '(0 0 0))
     (gimp-selection-grow image grow-pixels)
     (gimp-context-set-foreground '(0 0 0))
     (gimp-edit-bucket-fill drawable BUCKET-FILL-FG LAYER-MODE-NORMAL 100 255 TRUE 0 0)
     (gimp-selection-none image)
     (plug-in-spread RUN-NONINTERACTIVE image drawable spread-amount spread-amount)
     (gimp-drawable-invert drawable TRUE)
     (plug-in-randomize-hurl RUN-NONINTERACTIVE image drawable percentage 1 TRUE 0)
     (gimp-file-save RUN-NONINTERACTIVE image drawable new-filename new-filename)
     (gimp-image-delete image)))

Définir les variables du script

Dans le script, la fonction (define (chalk filename grow-pixels spread-amound pourcentage) ...) définit une nouvelle fonction appelée chalk qui accepte les paramètres : nom du fichier, croissance des pixels, étendue de la superficie et pourcentage. Tout le reste à l'intérieur de la fonction define est le corps de la fonction chalk. Vous avez peut-être remarqué que les variables avec des noms longs sont orthographiées avec des tirets entre les mots ; c'est le style idiomatique des langages de type Lisp.

La fonction (let* ...) est une procédure spéciale qui vous permet de définir certaines variables temporaires valides uniquement à l'intérieur du corps. Dans ce cas, les variables sont image, drawable et new-filename. Il charge l'image avec gimp-file-load, qui renvoie une liste qui inclut l'image, puis il sélectionne la première entrée avec la fonction car. Ensuite, il sélectionne le premier calque actif et stocke sa référence dans la variable drawable. Enfin, il définit la chaîne contenant le nouveau nom de fichier de l'image résultante.

Pour vous aider à mieux comprendre la procédure, je vais la détailler. Tout d'abord, démarrez GIMP avec l'interface graphique activée et la console Script-Fu, qui se trouve dans Filtres → Script-Fu → Console. Dans ce cas, vous ne pouvez pas utiliser let* car les variables doivent être persistantes. Définissez la variable image à l'aide de la fonction define, et donnez-lui le chemin approprié pour trouver l'image :

(define image (car (gimp-file-load RUN-NONINTERACTIVE "Fourier.png" "Fourier.png")))

Il semble que rien ne s'est produit dans l'interface graphique, mais l'image est chargée. Vous devez activer l'affichage de l'image avec :

(gimp-display-new image)

(Cristiano Fontana, CC BY-SA 4.0)

Maintenant, récupérez le calque actif et stockez-le dans la variable drawable :

(define drawable (car (gimp-image-get-active-layer image)))

Enfin, définissez le nouveau nom de fichier de l'image :

(define new-filename "modified_Fourier.png")

Voici ce que vous devriez voir dans la console Script-Fu après avoir exécuté ces commandes :

(Cristiano Fontana, CC BY-SA 4.0)

Avant d'agir sur l'image, vous devez définir les variables qui seront définies comme arguments de fonction dans le script :

(define grow-pixels 2)
(define spread-amount 4)
(define percentage 3)

Agir sur l'image

Maintenant que toutes les variables pertinentes sont définies, vous pouvez agir sur l'image. Les actions du script peuvent être exécutées directement sur la console. La première étape consiste à sélectionner la couleur noire sur le calque actif. La couleur est écrite sous la forme d'une liste de trois nombres, soit (list 0 0 0) ou '(0 0 0) :

(gimp-image-select-color image CHANNEL-OP-REPLACE drawable '(0 0 0))

(Cristiano Fontana, CC BY-SA 4.0)

Agrandissez la sélection de deux pixels :

(gimp-selection-grow image grow-pixels)

(Cristiano Fontana, CC BY-SA 4.0)

Définissez la couleur de premier plan sur noir et remplissez la sélection avec :

(gimp-context-set-foreground '(0 0 0))
(gimp-edit-bucket-fill drawable BUCKET-FILL-FG LAYER-MODE-NORMAL 100 255 TRUE 0 0)

(Cristiano Fontana, CC BY-SA 4.0)

Supprimez la sélection :

(gimp-selection-none image)

(Cristiano Fontana, CC BY-SA 4.0)

Déplacez les pixels de manière aléatoire :

(plug-in-spread RUN-NONINTERACTIVE image drawable spread-amount spread-amount)

(Cristiano Fontana, CC BY-SA 4.0)

Inversez les couleurs de l'image :

(gimp-drawable-invert drawable TRUE)


(Cristiano Fontana, CC BY-SA 4.0)

Randomisez les pixels :

(plug-in-randomize-hurl RUN-NONINTERACTIVE image drawable percentage 1 TRUE 0)

(Cristiano Fontana, CC BY-SA 4.0)

Enregistrez l'image dans un nouveau fichier :

(gimp-file-save RUN-NONINTERACTIVE image drawable new-filename new-filename)

Équations de transformée de Fourier (Cristiano Fontana, CC BY-SA 4.0)

Exécuter le script en mode batch

Maintenant que vous savez ce que fait le script, vous pouvez l'exécuter en mode batch :

gimp -i -b '(chalk "Fourier.png" 2 4 3)' -b '(gimp-quit 0)'

Une fois la fonction chalk exécutée, elle appelle une deuxième fonction avec l'option -b pour dire à GIMP de quitter : gimp-quit.

Apprendre encore plus

Ce didacticiel vous a montré comment démarrer avec les fonctionnalités de script intégrées de GIMP et a présenté Script-Fu, l'implémentation du schéma de GIMP. Si vous souhaitez avancer, je vous suggère de regarder la documentation officielle et son tutoriel. Si vous n'êtes pas familier avec Scheme ou Lisp, la syntaxe peut être un peu intimidante au début, mais je vous suggère quand même de l'essayer. Cela pourrait être une belle surprise.

Articles connexes: