GIMP Script-fu - Dessiner un cadre flou sur une image


Cette page montre, à l'aide d'un script pour GIMP (Script-Fu), comment encadrer une image avec un cadre flou de largeur variable, délimité par une ligne blanche intérieure de 1 pixel.

001

Ecrire et enregistrer le script

Ecrire le script suivant avec le Bloc-Notes puis le sauvegarder avec le nom «cadreflou.scm» (l’utilisation de ce nom est obligatoire car il doit correspondre à celui indiqué dans le script afin que GIMP puisse l’enregistrer correctement). Placer ce fichier dans le répertoire «C:/ Program Files/GIMP/ lib/gimp/2.0/ share/gimp/ 2.0/ scripts».

Au début du script, à l'intérieur de la fonction «define», on distingue les paramètres suivants :

  • «inImage» passé à la fonction define est associé à la ligne «SF-IMAGE "inImage" 0» située en fin de script. Il correspond à l’image en cours visible dans la fenêtre principale de GIMP ;
  • «inLayer» est associé à la ligne «SF-DRAWABLE "inLayer" 0» située en fin de script. Il correspond au calque dans lequel se trouve l'image en cours visible dans la fenêtre principale de GIMP ;
  • «inRadius» est associé à la ligne «SF-ADJUSTMENT "inRadius" '(30 0 300 1 1 0 0)" 0» située en fin de script. Ce paramètre correspond au rayon du flou (fixé ici à 30 par défaut) dont la valeur est à choisir entre 0 et 300 à l'aide du curseur correspondant situé dans la boîte de dialogue qui s'affiche au lancement du script ;
  • «inSize» est associé à la ligne « SF-ADJUSTMENT "inSize" '(20 0 300 1 1 0 0)» située en fin de script. Ce paramètre correspond à la largeur de la zone de flou (fixée ici à 20 par défaut) dont la valeur est à choisir entre 0 et 300 à l'aide du curseur correspondant situé dans la boîte de dialogue qui s'affiche au lancement du script.;

La première partie du script consiste à déclarer les variables qui seront utilisées par le script :

  • malargeur et mahauteur : pour mémoriser la largeur et la hauteur de l'image ouverte dans GIMP ;
  • moncadre : ligne rectangulaire fermée définie à l’aide d’un tableau de 10 double destiné contenir les abscisses et les ordonnées des 5 points qui définissent le tracé fermé (le dernier point du tracé est identique au premier) ;
  • s : largeur de la zone de flou
  • w et h :largeur et hauteur de l'image diminuées de la largeur s de la zone de flou ;
  • macouleur : couleur du cadre de 1 pixel placé à la limite intérieure de la zone de flou ;
  • n : nombre de coordonnées des points constituant le tracé, c'est à dire 10 (5 points de 2 coordonnées chacun).

2

L'instruction «(gimp-context-push)» mémorise le contexte initial de GImp.

Les lignes suivantes consistent à créer une nouvelle brosse (pinceau) appelée «mabrosse» et à utiliser cette brosse comme brosse courante ;

L'instruction «(gimp-image-select-rectangle monimage CHANNEL-OP-REPLACE s s (- w s) (- h s))» sélectionne la partie rectangulaire intérieure de l'image qui doit rester nette.

L'instruction «(gimp-selection-invert monimage)» inverse cette sélection. La zone de flou est donc sélectionnée. L'instruction «(plug-in-gauss-iir RUN-NONINTERACTIVE monimage moncalque inRadius TRUE TRUE)» applique un flou à cette zone (zone de largeur s encadrant l'image).

L'instruction «(gimp-selection-none monimage)» annule la sélection en cours. Les instructions suivantes tracent le rectangle blanc sur l'image.

L’instruction «(gimp-displays-flush)» annule les mises à jour en attente et l'instruction «(gimp-context-pop)» restaure le contexte initial de GImp.

La partie script-fu-register permet de faire enregistrer le script par Gimp. L’instruction «"/MesScripts/cadreflou"» indique à GIMP que le script doit être accessible depuis la fenêtre principale de Gimp avec l’option de menu «MesScripts/cadreflou».

;--------------------------------------------------------------------------------
; Ce script crée un cadre flou délimité par cadre intérieur blanc de 1 pixel
; à la périphérie d'une image quelconque ouverte dans GIMP,
; sans modifier la taille de cette image
; Auteur : Claude Turrier - 28 mai 2016
;--------------------------------------------------------------------------------
; This program is free software: you can redistribute it and/or modify
; it under the terms of the GNU General Public License as published by
; the Free Software Foundation
; This program is distributed in the hope that it will be useful,
; but WITHOUT ANY WARRANTY; without even the implied warranty of
; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
; GNU General Public License for more details.
;--------------------------------------------------------------------------------
(define (script-fu-cadreflou inImage inLayer inRadius inSize )
(let*
(
(monimage inImage)
(moncalque inLayer)
(mahauteur (car (gimp-drawable-height moncalque)))
(malargeur (car (gimp-drawable-width moncalque)))
(s inSize)
(w 0)
(h 0)
;---------------------------couleur modifiable-------------------------------
(macouleur '(255 255 255)) ; blanc couleur du cadre
;-----------------------------------------------------------------------------
(n 10) ; nombre de coordonnées des points constituant le tracé
(moncadre (cons-array 10 'double))
)
(gimp-context-push)
(gimp-brush-new "mabrosse")
(gimp-brushes-refresh)
(gimp-context-set-brush "mabrosse")
(gimp-context-set-brush-aspect-ratio 0)
;--cadre blanc de 1 pixel d'épaisseur
(gimp-context-set-foreground macouleur) ; blanc
(gimp-context-set-brush-size 1); 1 pixel
(set! w (- malargeur s))
(set! h (- mahauteur s))
(gimp-image-select-rectangle monimage CHANNEL-OP-REPLACE s s (- w s) (- h s))
(gimp-selection-invert monimage)
(plug-in-gauss-iir RUN-NONINTERACTIVE monimage moncalque inRadius TRUE TRUE)
(gimp-selection-none monimage)
(aset moncadre 0 s) ; x point 1
(aset moncadre 1 s) ; y point 1
(aset moncadre 2 w) ; x point 2
(aset moncadre 3 s) ; y point 2
(aset moncadre 4 w) ; x point 3
(aset moncadre 5 h) ; y point 3
(aset moncadre 6 s) ; x point 4
(aset moncadre 7 h) ; y point 4
(aset moncadre 8 s) ; x point 5
(aset moncadre 9 s) ; y point 5
(gimp-pencil moncalque n moncadre ); tracé des 4 lignes du cadre dans l'ordre des 5 points
(gimp-displays-flush)
(gimp-context-pop)
) ; fin de let*
) ; fin de define
(script-fu-register "script-fu-cadreflou"
"<Image>/MesScripts/cadreflou"
"-------------------------------"
"Crée un cadre flou sur une image"
"Claude Turrier"
"2016"
"-------------------------------"
SF-IMAGE "inImage" 0
SF-DRAWABLE "inLayer" 0
SF-ADJUSTMENT "inRadius" '(30 0 300 1 1 0 0)
SF-ADJUSTMENT "inSize" '(20 0 300 1 1 0 0)
)

Utiliser le script

Cliquer «Fichier/Ouvrir» pour ouvrir une image dans GIMP.

3

Cliquer «MesScripts/cadreflou» pour appliquer le script à l'image ouverte.

4

Dans la boîte de dialogue du script qui s'ouvre, choisir un rayon flou de 5 et une largeur de bordure floue de 30 par exemple puis cliquer le bouton «Valider».

5

Le résultat attendu est aussitôt obtenu. Il ne reste plus qu'à enregistrer l'image avec un nom différent de l'image d'origine afin de ne pas effacer cette dernière («Fichier/Export As...»).

2

Télécharger le code source du script : cadreflou.scm.

Remarque : pour appliquer le script automatiquement à un lot d’images, il suffit d’utiliser, par exemple, le plugin «BIMP» créé par alessandro francesconi.
L’installation et l’utilisation de ce plugin sont décrits dans la page GIMP - Traitement par lot