LES SCRIPTS FOURNIS
Si votre installation
de Gimp est complète, en cliquant sur le menu " Xtns ", dans le
sous-menu " Script-Fu ", vous trouverez un grand nombre de scripts déjà
installés. Notez, au passage, que beaucoup de ces scripts nécessitent
des polices de caractères contenues dans les packages freefonts
et sharefonts. En l'absence de ces polices, Gimp vous gratifiera d'un message
d'erreur au lancement du script.
Dans le sous-menu
" Script-Fu ", vous avez également la console qui vous permet d'entrer
des commandes de manière interactive. Cliquez sur " Console " pour
la faire apparaître.
ECRIRE UN SCRIPT : LES VARIABLES
Ecrire un script-fu
est semblable à l'écriture d'une mini-application. Le script
sera interprété par Gimp et directement appliqué.
Comme dans bien des langages, il est nécessaire que le programmeur
ait la possibilité de stocker des valeurs et des chaînes de
caractères pour les utiliser par la suite. En programmation, on
appelle cela des variables.
En langage Scheme
utilisé par les script-fu, on déclare la variable grâce
à la commande let*. Exemple :
(let* ((a 1) (b
5)) (+ a b))
Par cette ligne,
nous définissons les deux variables a et b. Dans le même temps,
nous les initialisons respectivement à 1 et 5. Enfin, nous calculons
a plus b. Si vous saisissez cet exemple dans la console vous verrez apparaître
==>let* ((a 1)
(b 5)) (+ a b))
puis
6
LES LISTES
En langage Scheme,
il est important de faire la différence entre une valeur atomique
et une liste. Une valeur atomique est une valeur unique stockée
dans une variable, comme dans l'exemple précédent. Mais on
peut également stocker dans une variable une suite de valeurs.
Exemple :
(let* ((x '(1 3
2))) x)
Ici, nous avons
défini la variable x, puis nous l'avons initialisé avec la
liste 1 3 2. Cette ligne provoquera l'affichage de (1 3 2) et non d'une
seule valeur. Il est également possible de définir une liste
avec la fonction list de la manière suivante :
(list 5 4 8 7 5
6)
Pour accéder
à une valeur individuelle de la liste, il faut utiliser les fonctions
car et cdr. La fonction car renvoie le premier élément de
la liste.
Exemple :
(car '("jambon"
"huître" "fromage "))
renvoi "jambon".
La fonction cdr, quant à elle, renvoie le reste de la liste après
le premier élément. Exemple :
(cdr '("jambon"
"huître" "fromage"))
retourne ("huître"
"fromage").
Mais comment accéder
à autre chose dans une liste ? Il suffit simplement d'imbriquer
les fonctions. Exemple :
(cdr (cdr '("jambon"
"huître" "fromage")))
renvoi ("fromage")
et
(car (cdr '("jambon"
"huître" "fromage")))
renvoi ("huître").
Certaines fonctions
peuvent également faire de même. Par exemple cddr équivaut
à (cdr (cdr et cadr équivaut
PREMIER SCRIPT-FU
Dans un premier
temps, il vous faut savoir où vous désirez placer votre script
et comment l'intégrer dans les menus de Gimp. Les scripts peuvent
être placés dans le répertoire .gimp/scripts de votre
répertoire privé ou encore dans le répertoire /usr/share/gimp/scripts.
Chaque script-fu
définit au moins une fonction. C'est la fonction principale du script,
celle qui fera le travail. Un script-fu doit également s'enregistrer
au niveau de la " procédural database " qui est accessible par le
menu " Xtns " " DB Browser ".
La fonction principale
sera :
(define (script-fu-text-boite
inText inFont inFontSize inTextColor))
Par cela, nous
définissons la fonction " script-fu-text-box " qui recevra quatre
paramètres : inText pour le texte, inFont pour la police, inFontSize
pour la taille et inTextColor pour la couleur. En enregistrant cette ligne
dans un fichier textbox.scm dans le répertoire des scripts de Gimp,
nous ajoutons un nouveau script qui ne fait rien ! Pour enregistrer notre
script dans la base de données, il faut ajouter ceci afin que Gimp
enregistre un certain nombre d'informations sur le nouveau script :
(script-fu-register
"script-fu-text-box"
"/Xtns/Script-Fu/Text/Text
Box"
"Creates a simple
text box, sized to fit around the user's choice of text,
font, font
size, and color."
"Michael
Terry"
"1997,
Michael Terry"
"October
27, 1997"
""
SF-VALUE
"Text:" "Text Box"
SF-VALUE
"Font:" "futura_poster"
SF-VALUE
"Font size:" "45"
SF-COLOR
"Color:" '(0 0 0))
Une fois le fichier
sauvegardé, lancez Gimp puis faites "Xtns" "Script-Fu" "Refresh".
Puis vérifiez qu'un menu " Texte boite " s'est bien ajouté
dans le menu " Text ". En cliquant dessus, vous devriez voir apparaître
la fenêtre en figure 1. Dans le DB Browser, notre script doit également
apparaître figure 2. Les paramètres utilisables pour l'enregistrement
du script sont les suivants :
SF-VALUE : Permet
de passer un paramètre de valeur en numérique ou en chaîne
de caractère.
SF-COLOR : Indique
qu'une couleur est demandée comme paramètre.
SF-TOGGLE : Permet
de basculer sur une valeur booléenne (oui/non).
SF-IMAGE : Permet
de définir que le script opère sur une image ouverte.
SF-DRAWABLE :
Ce paramètre vient en plus de SF-IMAGE et indique une action sur
un layer.
ACTION DU SCRIPT-FU
Notre script a
pour but de créer une nouvelle image composée autour d'un
texte entré par l'utilisateur. L'image devra prendre la taille correcte
par rapport au texte en fonction de la police utilisée et de sa
taille.
Nous allons donc
créer une image en utilisant la fonction gimp-image-new intégrée
à Gimp. Notez que toutes les fonctions disponibles dans Gimp sont
répertoriées dans DB Browser.
Les paramètres
à passer pour la création de l'image sont sa largeur et sa
hauteur. Pour cela, ajoutez le texte suivant dans notre fichier text
box.scm (avant
la fonction d'enregistrement) :
(let*
(
(theImageWidth
10)
(theImageHeight
10)
(theImage (car
(gimp-image-new theImageWidth theImageHeight RGB) ) )
(theText)
Nous définissons
une hauteur et une largeur de 10. Puis nous définissons une nouvelle
variable "theImage" qui accueillera l'ID de l'image créée
grâce à la fonction car. Notez que nous déclarons aussi
la variable theText pour le texte de l'utilisateur que nous utiliserons
plus tard.
A présent
que nous avons créé l'image, il faut ajouter un layer pour
y mettre le texte. La fonction "gimp-layer-new" se chargera de l'opération
en lui passant l'ID de l'image fraîchement créée :
(theLayer (car
(gimp-layer-new theImage theImageWidth theImageHeight RGB_IMAGE "layer
1" 100 NORMAL) ))
Puis nous ajoutons
ce layer à l'image :
(gimp-image-add-layer
theImage theLayer 0)
Enfin nous affichons
l'image :
(gimp-display-new
theImage)
Si vous enregistrez
ceci dans le fichier et lancez ce script depuis Gimp après avoir
fait "Xtns" "script-Fu" "Refresh", vous obtiendrez certainement une image
avec des couleurs aléatoires et ceci parce que l'image n'a pas été
nettoyée.
A présent,
ajoutons le texte. En premier lieu, supprimez la ligne qui affiche l'image,
elle n'était là que pour l'exemple. Avant d'ajouter le texte,
nous devons donner une couleur au fond :
(gimp-palette-set-background
Î(255 255 255) )
Ainsi que pour
le texte :
(gimp-palette-set-foreground
inTextColor)
Notez que c'est
l'utilisateur qui renseigne la variable TextColor que nous avons défini
dans la fonction principale.
Maintenant que
les couleurs sont annoncées, nettoyons l'image en sélectionnant
l'ensemble et en appelant la fonction " clear " :
(gimp-selection-all
theImage)
(gimp-edit-clear
theImage theLayer)
(gimp-selection-none
theImage)
L'ajout du texte
se fera par :
(set! theText (car
(gimp-text theImage theLayer 0 0 inText 0 TRUE inFontSize PIXELS "*" inFont
"*" "*" "*" "*")))
Il s'agit d'une
fonction relativement complexe. Jetez un oeil dans DB Browser, sous la
fonction gimp-text, vous y trouverez toutes les explications utiles.
A présent,
nous devons redimensionner l'image pour l'accorder avec la taille du texte.
Dans un premier temps, nous récupérons les dimensions du
texte :
(set! theImageWidth
(car (gimp-drawable-width theText)))
(set! theImageHeight
(car (gimp-drawable-height theText)))
Puis nous accordons
la taille de l'image :
(gimp-image-rezise
theImage theImageWidth theImageHeight 0 0)
et du layer
(gimp-layer-rezise
theImage
theLayerWidth
theImageHeight 0 0)
La différence
entre drawable et layer est très subtile. Le drawable est tout ce
que l'on peut dessiner à l'intérieur et le layer est une
version plus spécifique du drawable. Cette définition est
relativement vague, mais dans la majorité des cas la distinction
n'est pas importante. Nous pouvons, maintenant, afficher l'image par :
(gimp-display-new
theImage)
Sauvegardez les
modifications puis rafraîchissez la base par "Xtns" "Script-Fu" "Refresh".
Lancez votre script et vous devriez voir apparaître la figure 3.
Note : Lorsque
vous fermez l'image générée par le script-fu, Gimp
vous demandera si vous désirez la sauvegarder. Cette question est
assez pénible lorsque vous testez votre script. L'astuce consiste
à effacer le " dirty flag " utilisé pour faire apparaître
la question :
(gimp-image-clean-all
theImage)
Vous pouvez également
permettre à l'utilisateur d'annuler le travail de votre script en
une seule fois. En effet, la fonction " und " qui est très utile
en temps normal peut être des plus ennuyeuses si l'utilisateur doit
annuler chaque étape de votre script une par une. Placez donc la
fonction gimp-image-disable-undo en début de script, puis gimp-image-enable-undo
à la fin. |