mardi 23 septembre 2008

Ecrire un script-fu pour automatiser un traitement

tutoriel script-fu gimp effet verre
Une règle simple en informatique : "Si tu dois faire la même chose dix fois, écris un programme!".
En effet, rien de plus lassant que de refaire dix fois la même manipulations sous Gimp. Pour arranger cela et nous faciliter les choses, il existe les scripts-fu. Nous en utilisons souvent sans même le savoir dans le menu Filtres.
Nous allons donc voir comment rendre automatique la création de texte en verre en se basant sur le tutoriel Ecrire en lettres de verre.

Pour les utilisateurs de Gimp2.6 : afin de voir apparaitre ce script dans vos menus, il faut remplacer les lignes qui définissent dans quel menu apparaitra votre script.
Ainsi (script-fu-menu-register "effet-verre" "/Xtns/Logos") deviendra (script-fu-menu-register "effet-verre" "<Image>/Filters/MesScripts").
De cette façon, vous pourrez trouver votre script fraichement installé dans le menu Filtres->MesScripts de la fenêtre Editeur d'image Gimp.

Le principe d'un script est simple, il décrit étape par étape les opérations que nous effectuons sous Gimp en utilisant des procédures. L'ensemble des procédures dont nous disposons est listée dans le menu Exts -> Navigateur de procédures de la fenêtre principale de Gimp.
Nous y retrouvons par exemple gimp-layer-new qui permet de créer un nouveau calque ou encore gimp-edit-cut qui coupe une sélection.

1.) Pour écrire notre script, un éditeur de texte simple nous suffit. Le bloc-note de Windows ou gedit sous Linux feront l'affaire. Nous lançons donc notre éditeur et enregistrons tout de suite notre fichier dans le répertoire scripts de notre dossier d'installation de Gimp.
Nous appelerons, par exemple, notre fichier effet_verre et lui donnons l'extension .scm (extension des scripts de Gimp).

Nous avons donc un fichier effet_verre.scm placé dans le répertoire scripts de notre Gimp.

2.) La première étape de l'écriture de notre script-fu consiste à décrire les étapes même des opérations que nous souhaitons faire effectuer à Gimp. Pour cela nous devons définir une procédure que l'on nommera applique-verre-effet.
Nous tapons donc le code (code signifie ici le contenu d'un programme) suivant :

(define (applique-verre-effet img calque-txt)

Nous indiquons de cette façon que nous définissons (define) une méthode pour appliquer l'effet de verre à l'image img et au calque de texte calque-txt.

Dans cette méthode, nous aurons besoin d'informations comme la hauteur et la largeur de l'image et nous aurons aussi besoin d'un nouveau calque. Nous définissons donc ces variables à l'aide du mot let à l'intérieur de notre procédure applique-verre-effet :

(define (applique-verre-effet img calque-txt)


(let* (
(largeur (car (gimp-drawable-width calque-txt)))
(hauteur (car (gimp-drawable-height calque-txt)))
(calque1 (car (gimp-layer-new img largeur hauteur RGBA-IMAGE "calque-txt 1" 40 NORMAL-MODE)))
)


)


gimp-drawable-width et gimp-drawable-width sont deux procédures qui permettent de récupérer la hauteur et la largeur du calque calque-txt.
Ainsi nous créons grace à gimp-layer-new un nouveau calque calque1 placé sur l'image img de la même largeur et hauteur que calque-txt en mode RVB, dont le nom sera calque-txt1 dans la fenêtre de Gimp, avec une opacité de 40 (pour l'effet transparent du verre) et en mode normal.

Pour connaitre les paramètres qu'il est nécessaire de préciser à une procédure et les valeurs qu'ils peuvent prendre, il suffit de consulter le menu Exts -> Navigateur de procédures :


3.) Nous rentrons maintenant dans le vif du sujet et allons décrire à Gimp les opérations qu'il doit effectuer sur l'image pour appliquer notre effet de verre.
Pour plus de lisibilité et une meilleure compréhension des commentaires sont rajoutés au dessus de chaque nouvelle ligne de code. Ces commentaires sont précédés d'un ; et peuvent être laissés tels quels dans le fichier.

(define (applique-verre-effet img calque-txt)

(let* (
(largeur (car (gimp-drawable-width calque-txt)))
(hauteur (car (gimp-drawable-height calque-txt)))
(calque1 (car (gimp-layer-new img largeur hauteur RGBA-IMAGE "calque-txt 1" 40 NORMAL-MODE)))
)

;Verrouillage de l'alpha du calque calque-txt
(gimp-layer-set-lock-alpha calque-txt TRUE)

;Découpage automatique de l'image à la taille de son contenu
(plug-in-autocrop 0 img calque-txt)

;Ajout à l'image du calque calque1
(gimp-image-add-layer img calque1 1)
;"Nettoyage" du calque calque1 (suppresion de lignes parasites)
(gimp-edit-clear calque1)
;Coloriage en blanc du texte du calque de texte calque-txt
(gimp-edit-fill calque-txt WHITE-FILL)
;Alpha vers sélection du calque de texte afin de ne sélectionner que le texte
(gimp-selection-layer-alpha calque-txt)
;Réduction de la sélection de 1 pixels
(gimp-selection-shrink img 1)
;Edition->Couper de la sélection réduite sur le calque de texte
(gimp-edit-cut calque-txt)
;Edition-> Coller sur le calque calque1 (opacité 40) et ancrage du calque
(gimp-floating-sel-anchor (car (gimp-edit-paste calque1 0)))
;Découpage automatique de l'image à la taille du calque1
(plug-in-autocrop-layer 0 img calque1)
)

)


Voilà la suite d'opérations que nous devons faire effectuer à Gimp pour obtenir notre effet transparent de verre. Ces opérations correspondent, engrande partie, à la suite de manipulations faites dans le tutoriel Ecrire en lettres de verre.


4.) Maintenant nous devons créer une nouvelle procédure que nous appellerons effet-verre qui sera la procédure principale de notre script. En effet, elle va créer notre image, gimp-image-new créer notre calque de texte, gimp-text-fontname appeler notre procédure applique-verre-effet et enfin afficher l'image créée avec gimp-display-new. Nous ajoutons donc à la suite de notre script le code suivant :

(define (effet-verre text size font )
(let* (
(img (car (gimp-image-new 256 256 RGB)))
(b-size (* size 0.2))
(calque-texte (car (gimp-text-fontname img -1 0 0 text b-size TRUE size PIXELS font)))
)
(applique-verre-effet img calque-texte)
(gimp-display-new img)
)
)


5.) Il ne nous reste alors qu'à créer l'interface qui permettra à l'utilisateur, de saisir le texte sur lequel il souhaite appliquer l'effet verre SF-STRING, de préciser la police à utiliser SF-FONT ainsi que sa taille SF-ADJUSTMENT.
Nous précisons ici aussi les données identifiant la procdure principale à appeler effet-verre, le créateur du script et son contenu.
Enfin nous demandons à Gimp de présenter ce script dans un de ses menus. Ici le menu choisi est Exts -> Logos.
Pour tout cela nous ajoutons ce code à la suite du script :

(script-fu-register
"effet-verre"
"Texte de verre"
"Crée un simple effet translucide de verre sur du texte"
"Skonce"
"Skonce"
"2008"
""
SF-STRING _"Text" ""
SF-ADJUSTMENT _"Font size (pixels)" '(100 2 1000 1 10 0 1)
SF-FONT _"Font" ""
)

(script-fu-menu-register "effet-verre" "/Xtns/Logos")


6.) Une fois que le code complet est saisi, que le fichier est bien enregistré dans le répertoire des scripts de Gimp au format .scm, il est nécessaire de demander à Gimp de recharger les scripts par le menu Exts -> Script-fu -> Actualiser les scripts.
Désormais nous avons un entrée dans le menu Exts -> Logos -> Texte de verre qui ouvre une boîte de dialogue :

script-fu gimp interface saisie donnéesNous pouvons alors saisir notre texte, préciser sa taille et sa police et cliquer sur Valider.
Le script s'exécute et affiche l'image créée :

résultat script gimpVoici la version complète du script :

(define (applique-verre-effet img calque-txt)

(let* (
(largeur (car (gimp-drawable-width calque-txt)))
(hauteur (car (gimp-drawable-height calque-txt)))
(calque1 (car (gimp-layer-new img largeur hauteur RGBA-IMAGE "calque-txt 1" 40 NORMAL-MODE)))
)

(gimp-layer-set-lock-alpha calque-txt TRUE)
(plug-in-autocrop 0 img calque-txt)

(gimp-image-add-layer img calque1 1)
(gimp-edit-clear calque1)

(gimp-edit-fill calque-txt WHITE-FILL)
(gimp-selection-layer-alpha calque-txt)
(gimp-selection-shrink img 1)
(gimp-edit-cut calque-txt)
(gimp-floating-sel-anchor (car (gimp-edit-paste calque1 0)))
(plug-in-autocrop-layer 0 img calque1)
)

)

(define (effet-verre text size font )
(let* (
(img (car (gimp-image-new 256 256 RGB)))
(b-size (* size 0.2))
(calque-texte (car (gimp-text-fontname img -1 0 0 text b-size TRUE size PIXELS font)))
)
(applique-verre-effet img calque-texte)
(gimp-display-new img)
)

)

(script-fu-register
"effet-verre"
"Texte de verre"
"Crée un simple effet translucide de verre sur du texte"
"Skonce"
"Skonce"
"2008"
""
SF-STRING _"Text" ""
SF-ADJUSTMENT _"Font size (pixels)" '(100 2 1000 1 10 0 1)
SF-FONT _"Font" ""
)

(script-fu-menu-register "effet-verre" "/Xtns/Logos")


Vous pouvez télécharger ce script ici.

Nous verrons dans un prochain tutoriel comment créer un script pour générer des alphabets complets pour le Scrapbooking Digital.

19 commentaires:

Anonyme a dit…

Génial, merci

Le_gnou a dit…

Alors, là ! Respect, Skonce ! Ce tuto, c'est du lourd...

Maria a dit…

Thank you! Your blog post will be advertised on the DigiFree Digital Scrapbooking Freebie search engine today (look for timestamp: 25 Sep [LA 12:00am, NY 02:00am, UK 07:00am, OZ 05:00pm] ).

Anonyme a dit…

C'est vraiment génial sauf que j'ai beau faire un copier coller ou télécharger sur le lien, ça ne marche pas même si j'actualise les scripts

Anonyme a dit…

c'est encore moi!! j'ai réessayer et maintenant ça me donne ça:
nstall procedure "effet-verre"
in the invalid menu location "/Xtns/Logos".
The menu path must look like either "Prefix" or "Prefix/path/to/item".

QUE FAIRE

Skonce a dit…

Salut,

Quelle version de gimp utilises-tu?
As-tu bien un menu Exts dans ta fenêtre principale de Gimp?

Leausy a dit…

bonjour,
je te remercie pour ces tuto tres enrichissant!
cela dit je n'arrive pas a utilise celui-ci.
j'utilise la version 2-6 de gimp le menu Exts n'apparait pas dans ma fenetre principal mais dans l'onglet "aide" j'ai "navigateur de procedure"

j'ai actualise les script..
comment je dois faire?
merci d'avance

Anonyme a dit…

j'utilise la version 2.6 et non je n'ai pas Exts

Skonce a dit…

Ok. C'est lié à la version 2.6 de Gimp que je n'utilise pas encore étant sous Ubuntu...Je vais installer la 2.6 sous win et vous tiendrai au courant.

Anonyme a dit…

bonjour
je sui bloquer au premier code je sais pas ou il fo le rentré

Skonce a dit…

Bonjour,

Pour les utilisateurs de Gimp2.6 : afin de voir apparaitre ce script dans vos menus, il faut remplacer les lignes qui définissent dans quel menu apparaitra votre script.
Ainsi (script-fu-menu-register "effet-verre" "/Xtns/Logos") deviendra (script-fu-menu-register "effet-verre" "<Image>/Filters/MesScripts").

De cette façon, vous pourrez trouver votre script fraichement installé dans le menu Filtres->MesScripts de la fenêtre Editeur d'image Gimp.

Anonyme a dit…

salut
je suis vraiment désolé mais ça ne marche toujours pas:
Plug-In "none"
(none)
attempted to install procedure "effet-verre"
in the invalid menu location "/Xtns/Logos".
The menu path must look like either "Prefix" or "Prefix/path/to/item".

AU SECOURS!!!!!

Skonce a dit…

Bonjour,

Vous utilisez le script téléchargé ou vous l'avez édité vous-même?
Si c'est le script téléchargé que vous utilisez c'est normal, il faut l'éditer et modifier la ligne qui précise le menu comme expliqué dans le commentaire précédent.
Si vraiment vous ne trouvez pas envoyez moi votre fichier script sur gimptutoriel@gmail.com

Anonyme a dit…

MMMMMEEEEERRRRRRRRCCCCCIIIIII
ça fait 1 mois que je suis en galère avec ça merci bcp

MrBlue a dit…

Bonjour,

Votre tutoriel a l'air très intéressant. Je cherchais une méthode pour faire mes propres scripts de retouche photo. Cependant la lecture de votre blog est rendu très difficile par la couleur de police utilisée pour certaines lignes. Vous devez absolument éviter le rouge vif sur du orange, ça fait trop mal au yeux...

MrBlue

Skonce a dit…

Allez pour MrBlue, transformation du rouge en ... blue!

Anonyme a dit…

formidable tout simplement formidable!!!

Anonyme a dit…

Bonjour !
Je suis novice dans Gimp, et après avoir réussi l'aspect métal que l'on peut trouver ici : http://www.lefinnois.net/artGIMP/metal/metal.php, j'ai téléchargé et essayé d'éditer le script (je suis sous Gimp 2.6), mais je n'y suis pas arrivée.
Pourriez-vous m'aider ?
Merci d'avance

Groupdmt a dit…

Grand pour connaître le - en profondeur de cette blog.This va vraiment aider pour mes pas en avant pour être prises.
prépresse