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.
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).
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.
Cliquer «MesScripts/cadreflou» pour appliquer le script à l'image ouverte.
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».
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...»).
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