![]() |
Programmez un Tetris en Java 360 pages PDF pour apprendre à votre rythme. Développez des jeux vidéo en Java. www.jdevmaker.com |
Ce document est sous un contrat Creative Commons.
Nous allons voir le script-fu-register, la procédure servant a identifier notre script dans Gimp, permettant à celle-ci d'être appelé de façon interactive ou par d'autres scripts (en mode interactif ou non).
L'étude de 6 points particuliers nous permettrons de faire un tout assez complet (mais probablement pas exhaustif) de ce sujet.
Le Scheme exige une syntaxe avec des ouverture et fermeture de parenthèses emboîtées. Cette procédure n'échappe pas à la règle.
![]() |
Dans un second temps, il convient de spécifier le nom de votre fonction tel que vous l'avez déclarée ; la syntaxe exige que cela soit fait entre guillemets.
![]() |
Vient ensuite une ligne permettant de définir le chemin d'accès dans le menu de Gimp ; la syntaxe exige que cela soit fait entre guillemets.
![]() |
![]() |
En premier, vous devez indiquer depuis qu'elle fenêtre de Gimp le script pourra être appelé. Il y a 4 possibilités :
<Image>
C'est la fenêtre image de Gimp, le plan de travail. Cela convient bien aux scripts travaillant sur des images déjà existante.
<Toolbox>
C'est la fenêtre d'outils de Gimp. Cela convient bien aux scripts qui n'utiliseront aucunes images existantes et en créeront une nouvelle.
<Load> et <Save>
Vous avez la possibilité d'écrire des scripts de lecture ou de sauvegarde d'image(s). Par exemple pour des traitements par lots.
Ensuite vous spécifiez les différents niveaux de menu. Vous êtes totalement libre, c'est à dire que vous pouvez indiquer un ou des menus déjà existant, ou créer un ou des menus personnels inexistant. (A noter que les menus existant doivent être indiqués en anglais : le menu Calque est en fait Layer). La syntaxe exige que chaque niveaux soit précédé d'un slash (/).
Les 4 lignes suivante sont des commentaires qui apparaîtront à la fois dans la base de procédure (<toolbox> Exts > Script-fu > Explorer la base de procédure), et dans la fenêtre à propos du dialogue du script (si il y en a un !) ; la syntaxe exige que cela soit fait entre guillemets.
![]() |
![]() |
Ce paramètres permet de filtrer l'utilisation du script suivant le mode de l'image. Ainsi avec des images utilisant un mode non supporté, le script ne pourra être lancé.
![]() |
Les 3 modes de base sont : RVB, niveaux de gris et Couleurs indexées :
RVB | Niveaux de Gris | Couleurs Indexées | |
Sans le canal Alpha | "RGB" | "GRAY" | "INDEXED" |
Avec le canal Alpha | "RGBA" | "GRAYA" | "INDEXEDA" |
Sans ou avec le canal Alpha | "RGB*" | "GRAY*" | "INDEXED*" |
Tous les modes | "RGB* GRAY* INDEXED*" ou "" |
Il est tout à fait possible de combiner ces paramètres. Divers exemples :
"RGB GRAYA"
"RGB* GRAY*"
"RGBA INDEXEDA"
"RGB* GRAY INDEXEDA"
Chaque paramètres déclarés dans le script-fu-register doit être lié a une variable dans la déclaration de la fonction correspondante. La première variable assignée au premier paramètre, la seconde au second paramètre, la troisième au troisième paramètre, ainsi de suite...
Voici un exemple (notez que le code de la fonction n'y apparaît pas) :
![]() |
Le nom de ces variables est a votre discrétion, mais attribuez un nom unique pour chaque.
6.2.1 Les paramètres obligatoires
Si votre script travaille avec une image existante vous devrez impérativement utiliser 2 paramètres obligatoires, à écrire en premier paramètre.
SF-IMAGE "Image" 0
Ce paramètre permet d'identifier l'image active dans Gimp. Ainsi cette image sera celle que l'utilisateur voudra utiliser.
SF-DRAWABLE "Drawable" 0
Ce paramètre permet d'identifier le calque actif dans Gimp. Ainsi ce calque sera celui que l'utilisateur voudra utiliser. Ce paramètre est obligatoires, même si vous ne l'utilisez pas concrètement dans votre script.
6.2.2 Les paramètres optionnels
De nombreux types de paramètres peuvent être utilisés, offrant un vaste panel d'objets (tirette, bouton, listbox...). A chaque fois vous spécifiez une chaîne décrivant le paramètres et vous lui octroyez une valeur par défaut.
6.2.2.1 la boîte de valeur numérique simple
La valeur est numérique ou alphanumérique. syntaxe :
SF-VALUE "Description" "[valeur]"
![]() SF-VALUE "Nom du parametre" "100"
|
Si vous désirez spécifier des guillemets dans les chaînes, il vous faudra les faire précéder d'un anti-slash (\) comme en JavaScript.
Par exemple : SF-VALUE "Description" "\"valeur\""
6.2.2.2 la boîte de valeur numérique complexe
La valeur est numérique. syntaxe :
SF-ADJUSTMENT "Description"
'([valeur par défaut]
[mini]
[maxi]
[incrément]
[incrément rapide]
[nbre de décimal après la virgule, 0=entier]
[mode, SF-SLIDER (0), SF-SPINNER (1)]
)
![]() SF-ADJUSTMENT "Nom du parametre"
'(10 1 30 1 10 0 1) |
![]() SF-ADJUSTMENT "Nom du parametre"
'(10 1 30 0.1 10 1 0) |
6.2.2.3 la textbox
La valeur est alphanumérique. syntaxe :
SF-STRING "Description" "[chaîne]
![]() SF-STRING "Nom du parametre" "The Gimp"
|
Si vous désirez spécifier des guillemets dans les chaînes, il vous faudra les faire précéder d'un anti-slash (\) comme en JavaScript.
Par exemple : SF-STRING "Description" "\"The Gimp\""
6.2.2.4 la checkbox
Une valeur de type binaire. syntaxe :
SF-TOGGLE "Description" Flag
![]() SF-TOGGLE "Nom du parametre" TRUE
|
6.2.2.5 la listbox
Une valeur a choisir parmi d'autres. syntaxe :
SF-OPTION "Description" '("[valeur]" "[valeur]" ... )
![]() SF-OPTION "Nom du parametre"
'("texte 1" "texte 2" "etc...") |
6.2.2.6 la colorbox
Définie une couleur. syntaxe :
SF-COLOR "Description" '([liste])
![]() SF-COLOR "Nom du parametre" '(63 252 0)
|
6.2.2.7 la boite de fonte
Définie une fonte. syntaxe :
SF-FONT "Description" "[fonte]"
![]() SF-FONT "Nom du parametre" "Arial"
|
6.2.2.8 la boite de brosse
Définie une brosse. syntaxe :
SF-BRUSH "Description" '("[brosse]" [opacité] [espacement] [mode de peinture])
![]() SF-BRUSH "Nom du parametre"
'("Circle (03)" 1.0 44 0) |
6.2.2.9 la boite de pattern
Définie un motif. syntaxe :
SF-PATTERN "Description" "[motif]"
![]() SF-PATTERN "Nom du parametre"
"Parque #1" |
6.2.2.10 la boite de gradient
Définie un dégradé. syntaxe :
SF-GRADIENT "Description" "[dégradé]"
![]() SF-GRADIENT "Nom du parametre"
"German flag smooth" |
6.2.2.11 la boite de fichiers
Définie un fichier. syntaxe :
SF-FILENAME "Description" "[chemin/fichier]"
Sous une forme absolue ou relative, exemple :
![]() SF-FILENAME "Nom du parametre"
(string-append "" gimp-data-dir "/scripts/images/texture.jpg") |
gimp-data-dir permet de spécifier le chemin des données de Gimp, suivi d'un chemin relatif. string-append permet une concaténation de chaîne, vide ici, mais indispensable pour ne pas générer une erreur.
A noter les dossiers séparés par un slash (forme linux) et non pas un anti-slash.
6.2.2.12 la boite de chemin de fichier
Définie un chemin de fichier. syntaxe :
SF-DIRNAME "Description" "[chemin]"
![]() SF-DIRNAME "Nom du parametre" "c:/blender"
|
A noter les dossiers séparés par un slash (forme linux) et non pas un anti-slash.
6.2.2.13 la boite d'images
Indépendamment de l'image active obtenu par la même option, vous pouvez l'utiliser afin d'obtenir une liste de toutes les sessions image ouverte.
SF-IMAGE "Image" 0
![]() SF-IMAGE "Nom du parametre" 0
|
6.2.2.14 la boite de calques
Indépendamment du calque actif obtenu par la même option, vous pouvez l'utiliser afin d'obtenir une liste de tous les calques d'une image.
SF-LAYER "Description" 0
6.2.2.15 la boite de calques
Une liste de tous les canaux d'une image.
SF-CHANNEL "Description" 0
6.2.2.16 la boite de drawable
Une liste des calques et des canaux d'une image.
SF-DRAWABLE "Description" 0
Certains caractères provoque une erreur "invalid UTF-8 strings" s'ils sont utilisés dans les chaînes, tel le é, è, ç, ù, à, ^ (tous les caractères avec l'accent circonflexe), ¨ (tous les caractères avec le tréma), §, £, ¤.
![]() |
Ainsi pour definir un mode de calque au moyen d'un
SF-VALUE "Mode de calque" "NORMAL"
en utilisant une variable mode par exemple. Nous écrirons :
(set! (new-layer (car (gimp-layer-new img width height RGBA-IMAGE "Mon calque" 100 mode))))
En revanche, pour définir le nom du calque par le même moyen nous aurions une erreur. Ainsi la forme accompagné d'une variable name :
SF-VALUE "Nom du calque" "Mon calque"
puis,
(set! (new-layer (car (gimp-layer-new img width height RGBA-IMAGE name 100 ORMAL))))
serait impropre.
Vous noterez que le nom doit être dans la procédure gimp-layer-new spécifiée entre guillemets. Aussi vous faudra-t-il utiliser la forme :
SF-VALUE "Nom du calque" "\"Mon calque\""
qui serait juste.
Petit inconvénient qui pourrait-être évité en utilisant une autre option :
SF-STRING "Nom du calque" "Mon calque"
Vous pouvez utiliser un _ (underscore) dans 2 conditions différentes qu'il faut bien distinguer :
Par exemple essayez la forme suivante,
SF-VALUE _"Seed" "10"
Bien que le texte "Seed" soit en anglais, le _ indique à Gimp de chercher à traduire ce texte. Il consulte son catalogue de mot, et s'il le trouve, il traduit en fonction de la langue utilisez sur votre ordinateur. En français cela donnera "Graine". Attention, ne vous attendez pas à un traducteur bi-lingue, vous seriez déçu !
Par exemple essayez cette autre forme,
"<Image>/Script-Fu/_Exemple"
Cette fois, il ne s'agit pas de traduction. Le texte affiché dans le menu est non pas Exemple mais Exemple. Le soulignement du E indique qu'en tapant la touche clavier <b>e</b>, vous feriez apparaitre le dialogue du script, de même que si vous aviez cliqué sur lui avec votre souris.
Vous pouvez mettre ce _ où vous le désirez :
"<Image>/Script-Fu/Exem_ple"
Enfin, minuscule ou majuscule, c'est du pareil au même.
Notons que le focus joue des tours. Il ne suffit pas de faire apparaitre le menu pour que le raccourci fonctionne. il faut aussi que le curseur de la souris soit à l'intérieur du menu, sinon vous pouvez tapez sur les touches jusqu'a la saint glinglin, le dialogue ne s'affichera pas !