Vous tirez la langue, non ? Allez, entamons notre quatrième leçon : votre premier script de Script-Fu !
L'une des opérations les plus fréquentes que je réalise avec GIMP, est la création d'une boîte contenant un texte pour une page Web ou un logo. Mais vous ne savez jamais bien quelle taille donner à l'image au départ. Vous ne savez pas combien d'espace le texte occupera avec la taille de police que vous voulez.
Le Maître en Script-Fu (et l'étudiant), se rend compte rapidement que ce problème peut être aisément résolu et automatisé avec un Script-Fu.
Nous allons donc créer un script, appelé Text Box, qui crée une image dont la taille est parfaitement adaptée au texte que saisit l'utilisateur. Nous permettrons aussi à l'utilisateur de choisir la police de caractères, sa taille, et la couleur du texte.
Jusqu'à présent, nous avons travaillé avec la Console de Script-Fu. Nous allons maintenant réaliser l'édition de fichiers textes de script (en utilisant un éditeur tel que Kate par exemple).
Là où vous stockez vos scripts est affaire de préférence. Si vous avez accès au répertoire de scripts par défaut de GIMP, vous pouvez y placer vos scripts. Néanmoins, je préfère avoir mes scripts dans mon propre répertoire de scripts, bien séparés des scripts installés au départ.
Dans le répertoire .gimp-2.8
que GIMP a créé dans votre répertoire personnel, vous devriez trouver un répertoire nommé scripts
. GIMP recherchera systématiquement un répertoire pour les scripts dans votre répertoire .gimp-2.8
, et ajoutera les scripts de ce répertoire dans la base des Script-Fu. C'est donc là que vous devriez placer vos scripts personnels.
Tout script de Script-Fu définit au moins une fonction, qui est la fonction principale du script. C'est là que vous travaillerez.
Tout script doit également être connu de la base de données de procédures (PDB), de façon à ce que GIMP puisse y accéder.
Nous allons définir la fonction principale en premier :
(define (script-fu-text-box inText inFont inFontSize inTextColor))
Nous définissons ici une fonction appelée script-fu-text-box
avec quatre paramètres qui correspondront plus tard à un texte, une police, la taille de la police et la couleur du texte. La fonction est actuellement vide et ne fait rien. Jusqu'ici ça va – rien de neuf, rien de spécial.
Les conventions de dénomination de Scheme préfèrent les lettres minuscules avec traits d'union, ce que j'ai respecté dans la dénomination de la fonction. Toutefois, je me suis écarté de la convention en ce qui concerne les paramètres. Je préfère en effet les noms descriptifs pour mes paramètres et variables, c'est pourquoi j'ai ajouté le préfixe « in » aux paramètres, de façon à voir d'emblée qu'il s'agit de paramètres reçus par la fonction et non pas de paramètres émis par elle. Et j'utilise le prefixe « the » pour les variables définies au sein du script.
C'est une convention GIMP de nommer vos fonctions de script script-fu-xxx, parce qu'ainsi elle apparaîtront avec les script-fu quand elles seront listées dans la base de procédures. Cela permet aussi de les distinguer des greffons.
Maintenant, faisons connaître la fonction à GIMP. On réalise cela en appelant la fonction script-fu-register
. Quand GIMP lira le script, il exécutera cette fonction qui enregistrera le script dans la base de procédures. Vous pouvez placer cette fonction où vous voulez dans votre script, mais personnellement je la mets à la fin, après tout le reste de mon code.
Voici le listing pour enregistrer cette fonction (j'expliquerai ses paramètres dans un instant) :
(script-fu-register "script-fu-text-box" ;func name "Text Box" ;menu label "Creates a simple text box, sized to fit\ around the user's choice of text,\ font, font size, and color." ;description "Michael Terry" ;author "copyright 1997, Michael Terry;\ 2009, the GIMP Documentation Team" ;copyright notice "October 27, 1997" ;date created "" ;image type that the script works on SF-STRING "Text" "Text Box" ;a string variable SF-FONT "Font" "Charter" ;a font variable SF-ADJUSTMENT "Font size" '(50 1 1000 1 10 0 1) ;a spin-button SF-COLOR "Color" '(0 0 0) ;color variable ) (script-fu-menu-register "script-fu-text-box" "<Image>/File/Create/Text")
Enregistrez ces fonctions dans un fichier texte avec le suffixe .scm
dans votre répertoire de scripts, et choisissez → → , et ce nouveau script apparaîtra comme → → → .
Si vous lancez ce nouveau script, il ne fera rien bien sûr, mais vous pourrez voir les invites que vous avez créées quand vous avez enregistré le script (ça sera plus clair plus loin).
Finalement, si vous invoquez le Navigateur de Procédures (
→ ), vous verrez que votre script figure maintenant dans la base de procédures.Pour enregistrer notre script dans GIMP, nous appelons la fonction script-fu-register
, remplissons les sept paramètres requis et nous ajoutons nos propres paramètres de script, ainsi qu'une description et une valeur par défaut pour chaque paramètre.
Les paramètres requis
Le nom de la fonction que nous avons définie. C'est la fonction appelée quand notre script est invoqué, le point d'entrée dans notre script. C'est important parce qu'il est possible de définir plusieurs autres fonctions dans le même fichier, et GIMP doit savoir quelle fonction appeler. Dans notre exemple, nous n'avons défini qu'une seule fonction, text-box, que nous avons enregistrée.
L'emplacement dans le menu où le script est inséré est spécifié comme un chemin dans Unix, avec la racine du chemin qui est <Image>
.
Si votre script n'opère pas sur une image existante (et donc crée une nouvelle image, comme le fera notre script Text Box, vous voudrez l'insérer dans le menu d'image (barre de menus, clic droit sur la fenêtre d'image, touche F10).
Si votre script est destiné à opérer sur une image présente à l'écran, vous voudrez l'insérer dans le menu d'image. Le reste du chemin pointe sur les listes de menus, les menus et les sous-menus. Ainsi, nous avons enregistré notre script dans
→ → → ).Si vous avez remarqué, le sous-menu Text dans le menu Fichier/Créer n'existait pas au départ : GIMP crée automatiquement les menus qui n'existent pas.
Une description de votre script, qui sera affichée dans le Navigateur de Procédures.
Votre nom (l'auteur du script)
Information de Copyright.
La date à laquelle le script a été créé, ou la date de dernière révision.
Les types d'image sur lesquels travaille le script. Il peut s'agir de RGB, RGBA, GRAY, GRAYA, INDEXED, INDEXEDA. Ou aucun d'eux: dans notre cas, nous créons une image et nous n'avons pas besoin d'en définir le type.
Maintenant que nous avons vu la liste des paramètres requis, nous devons préciser ceux qui correspondent aux besoins de notre script. Nous devons fournir des précisions concernant leur type, pour la fenêtre de dialogue qui apparaît quand l'utilisateur choisit notre script. Nous devons aussi fournir une valeur par défaut.
Cette section du processus d'enregistrement a le format suivant :
Type de paramètre |
Description |
Exemple |
---|---|---|
|
Si votre script opère sur une image ouverte, ceci doit être le premier paramètre après les paramètres requis. GIMP transmettra une référence à l'image dans ce paramètre. |
3 |
|
Si votre script opère sur une image ouverte, ceci doit être le second paramètre, après le paramètre |
17 |
|
Accepte les nombres et les chaînes de caractères. Pour un texte, les guillemets doivent être précédés du caractère d'échappement \ , donc il vaut mieux dans ce cas utiliser |
42 |
|
Accepte les chaînes de caractères. |
"Un texte" |
|
Indique qu'une couleur est nécessaire pour ce paramètre. |
'(0 102 255) |
|
Une boîte de saisie est affichée, pour entrer une valeur Booléenne. |
TRUE ou FALSE (Vrai ou Faux) |
Note | |
---|---|
En plus des paramètres de types ci-dessus, il en existe d'autres pour le mode interactif, chacun d'eux créant une zone de dialogue dans la fenêtre de dialogue du script-fu. Vous trouverez la description de ces paramètres et des exemples dans le script de test |
Type de paramètre |
Description |
||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
En mode interactif il crée une zone de dialogue dans la fenêtre de dialogue du script-fu. SF-ADJUSTMENT "label" '(value lower upper step_inc page_inc digits type) Liste d'arguments de boutons
|
||||||||||||||||
|
Crée un bouton de choix de couleur. SF-COLOR "label" '(red green blue) ou SF-COLOR "label" "color" Liste d'arguments de boutons
|
||||||||||||||||
|
Crée une zone de sélection de fonte. Retourne le nom de la fonte sous la forme d'une chaîne de caractères. Il existe deux nouvelles procédures de type gimp-text pour utiliser facilement ce paramètre que retourne la fonction: (gimp-text-fontname image drawable x-pos y-pos text border antialias size unit font) (gimp-text-get-extents-fontname text size unit font) dans lesquelles le paramètre "font" est le nom de la fonte que vous obtenez. La taille spécifiée dans fontname est ignorée. Elle est utilisée seulement dans le sélecteur de fonte. On vous demandera de donner une valeur utilisable (24 pixels est un choix correct). SF-FONT "label" "fontname" Liste d'arguments de boutons
|
||||||||||||||||
|
Crée une zone de choix de brosse : prévisualisation de la brosse et à sa droite, bouton "Parcourir". Cliquer sur ce dernier fait apparaître la boite de dialogue des brosses avec possibilité de choisir une brosse ainsi que son espacement, son opacité et son mode. SF-BRUSH "Brush" '("Circle (03)" 100 44 0) Dans ce cas la brosse par défaut sera un Cercle (03) avec une opacité de 100, un espacement de 44 et en mode normal (0). Si cette sélection reste inchangée la valeur passée à la fonction comme paramètre sera '("Circle (03)" 100 44 0). |
||||||||||||||||
|
Crée une zone de choix de motif : prévisualisation du motif et à sa droite, bouton "Parcourir". Cliquer sur ce dernier fait apparaître la boite de dialogue des motifs. SF-PATTERN "Pattern" "Maple Leaves" La valeur retournée quand le script est appelé est une chaîne de caractères contenant le nom du motif. Si la sélection par défaut ci-dessus n'est pas modifiée, la chaîne contiendra "Maple Leaves". |
||||||||||||||||
|
Crée un bouton contenant une prévisualisation du dégradé. Si on appuie sur le bouton, une fenêtre de sélection de palette apparaît. SF-GRADIENT "Gradient" "Deep Sea" La valeur retournée quand le script est appelé est une chaîne de caractères contenant le nom du dégradé. Si la sélection par défaut ci-dessus n'est pas modifiée, la chaîne contiendra "Deep Sea". |
||||||||||||||||
|
Crée un bouton contenant le nom de la palette sélectionnée. Si on appuie sur le bouton, une fenêtre de sélection de palette apparaît. SF-PALETTE "Palette" "Named Colors" La valeur retournée quand le script est appelé est une chaîne de caractères contenant le nom de la palette. Si la sélection par défaut ci-dessus n'est pas modifiée, la chaîne contiendra "Named Colors". |
||||||||||||||||
|
Crée un bouton contenant le nom d'un fichier. Cliquer sur celui-ci fait apparaître la boite de dialogue de sélection de fichiers. SF-FILENAME "label" (string-append "" gimp-data-directory "/scripts/beavis.jpg") La valeur retournée quand le script est appelé est une chaîne de caractères contenant le nom du fichier. |
||||||||||||||||
|
Similaire à SF-FILENAME, mais permet de choisir un dossier. SF-DIRNAME "label" "/var/tmp/images" La valeur retournée quand le script est appelé est une chaîne de caractères contenant le nom du dossier. |
||||||||||||||||
|
Crée une boîte de choix (combo-box) pour des options possibles. La première option est l'option par défaut. SF-OPTION "label" '("option1" "option2") La valeur retournée quand le script est appelé est le numéro de l'option choisie (0 correspondant à la 1ère option...). |
||||||||||||||||
|
Crée une boîte de choix (combo-box) montrant toutes les valeurs possibles pour un type donné. Le premier paramètre doit être un nom d'énumération de valeurs de GIMP, sans le préfixe "Gimp". Le second spécifie la valeur par défaut. SF-ENUM "Interpolation" '("InterpolationType" "linear") La valeur retournée quand le script est appelé est la valeur choisie de l'énumération. |