TOP
tetris Programmez un Tetris en Java
360 pages PDF pour apprendre à votre rythme.
Développez des jeux vidéo en Java.
www.jdevmaker.com
Gimp 2.4
Documentation
Tutoriels
Ressources
Divers

Dernière mise à jour le 07 avr 2008
consultée 4380 fois
Apprendre  ›  Écrire un script-fu  ›  Tutoriel partie 13

 

Scheme, Tutoriel : Initiation avancée partie 13

Ce document est sous un contrat Creative Commons.

 

Nous allons changer l'utilité de notre script, afin de la compliquer un peu et de continuer a apprendre.

 

Conception

Le but à présent est de faire un script qui nous permette de colorier une image avec une couleur de notre choix. Plusieurs méthodes sont possibles. Une très simple, nous donnera de bon résultat.

C'est cette technique que nous allons utiliser. Nous possédons déjà le script qui crée un calque.

Cependant, certaines étapes dans la démarche ci-dessus ont été zappé, il nous faut être plus méticuleux :

 

Mise à jour

Pour rappel voici l'état actuel de notre script :

10 (define (script-fu-nouveau-calque-rapide image drawable) ;; declaration de la fonction
20 (gimp-image-undo-group-start img) ;; début d'historique d'annulation
30   (let* 
35           (
37            (mode (car (gimp-drawable-type-with-alpha drawable)))
40           (width (car (gimp-image-width img)))
45           (height (car (gimp-image-height img)))
50           (new-layer (car (gimp-layer-new img width height mode "Nom du calque" 100 NORMAL)))
55            )
60          (gimp-edit-clear new-layer)
70         (gimp-image-add-layer img new-layer -1)
75    );; fin du let
80 (gimp-image-undo-group-end img) ;; fin d'historique d'annulation
90 ) ;; fin de la fonction
 
100 (script-fu-register "script-fu-nouveau-calque-rapide" ;; nom du script
110       "<Image>/Perso/Quick Layer" ;; position du script dans le menu
120        "Cree un calque directement, sans dialogue" ;; commentaires
130        "Auteur" ;; auteur
140        "Copyright" ;; copyright
150        "Date" ;; date
160        "" ;; types d'images supportés par le script
170        SF-IMAGE "Image" 0 ;; image dans lequel le calque est ajouté
180        SF-DRAWABLE "Drawable" 0 ;; calque actif de l'image
190 ) ;; fin du register

 

Le nom de la fonction n'est plus vraiment adéquat. La ligne de commentaires non plus. Changez :

La ligne 100 par :

(script-fu-register "script-fu-filtre-couleur"

La ligne 10 par :

(define (script-fu-filtre-couleur image drawable)

La ligne 120 par :

"Cree un calque filtre de couleur"

La ligne 110 par :

"<Image>/Script-Fu/Filtre couleur"

Vous pouvez aussi enregistrez le script sous un autre nom .scm

 

Un nouveau paramètre

Insérons une nouvelle ligne 185 :

SF-COLOR "Couleur" '(255 0 0)

Nous disposons d'un nouveau paramètre pour le dialogue. Par défaut la couleur est rouge.

Nous allons encore modifier la ligne 10 en ajoutant une variable couleur qui détiendra la couleur de ce paramètre.

(define (script-fu-filtre-couleur image drawable couleur)

 

Désaturer

La procédure gimp-desaturate nous permet cela. Comme cette fonction n'est utilisable qu'avec une image en mode RVB, une partie de notre script ne correspond plus, nous qui nous étions efforcé de le rendre compatible avec tous les types d'images.

Supprimer la ligne 37.

Remplacer la ligne 50 par,

(new-layer (car (gimp-layer-new img width height RGBA-IMAGE "Nom du calque" 100 COLOR)))

Nous en avons profité pour changer aussi son mode de calque.

Le script ne doit donc accepter que les images de types RVB, c'est ce que nous allons signifier par la ligne 160 :

"RGB*"

 

Créez une nouvelle ligne 57 :

(gimp-desaturate drawable)

Ainsi nous désaturons le calque drawable qui est le calque actif de l'image active.

 

10 (define (script-fu-filtre-couleur image drawable couleur) ;; declaration de la fonction
20 (gimp-image-undo-group-start img) ;; début d'historique d'annulation
30   (let* 
35           (
40           (width (car (gimp-image-width img)))
45           (height (car (gimp-image-height img)))
50           (new-layer (car (gimp-layer-new img width height RGBA-IMAGE "Nom du calque" 100 COLOR)))
55            )
57         (gimp-desaturate drawable)
60          (gimp-edit-clear new-layer)
70          (gimp-image-add-layer img new-layer -1)
75    );; fin du let
80 (gimp-image-undo-group-end img) ;; fin d'historique d'annulation
90 ) ;; fin de la fonction
 
100 (script-fu-register "script-fu-filtre-couleur" ;; nom du script
110        "<Image>/Script-Fu/Filtre couleur" ;; position du script dans le menu
120        "Cree un calque filtre de couleur" ;; commentaires
130        "Auteur" ;; auteur
140        "Copyright" ;; copyright
150        "Date" ;; date
160        "RGB*" ;; types d'images supportés par le script
170        SF-IMAGE "Image" 0 ;; image dans lequel le calque est ajouté
180        SF-DRAWABLE "Drawable" 0 ;; calque actif de l'image
185       SF-COLOR "Couleur" '(255 0 0)
190 ) ;; fin du register

 

La mise à jour d'affichage

A ce stade, si vous utilisez le script tout doit bien se passer, même s'il n'est pas encore complet. Cependant, l'image reste toujours la même en couleur, alors que le dialogue de calque montre un calque désaturer comme nous l'avons écrit. Si vous cliquez sur "Arrière-plan" l'image apparaît alors désaturée.

Lorsque dans un script vous dessinez (au sens le plus large du terme) sur n'importe quel élément dessinable, vous devrez faire une mise à jour d'affichage pour que l'image affiche bien ce que le script a effectué. Notez que ce n'est qu'un problème d'affichage, seulement, votre script à parfaitement fait son travail.

La procédure pour cela est :

gimp-displays-flush

a mettre en fin de script. Il n'y a aucun paramètre, cela indique à Gimp de revoir l'affichage pour être certain que l'image correspond a ce qu'elle est.

En ligne 77 par exemple :

(gimp-displays-flush)

 

La couleur

Maintenant attribuons notre couleur de premier plan avec la variable couleur et la procédure gimp-palette-set-foreground, qui attribue une couleur pour le premier plan uniquement.

La ligne 71 fait cela :

(gimp-palette-set-foreground couleur)

En ligne 73 nous allons remplir notre calque avec la plus simple des procédures de remplissage :

(gimp-edit-fill new-layer 0)

0 indique la couleur de premier plan.

10 (define (script-fu-filtre-couleur image drawable couleur) ;; declaration de la fonction
20 (gimp-image-undo-group-start img) ;; début d'historique d'annulation
30   (let* 
35           (
40           (width (car (gimp-image-width img)))
45           (height (car (gimp-image-height img)))
50           (new-layer (car (gimp-layer-new img width height RGBA-IMAGE "Nom du calque" 100 COLOR)))
55            )
57          (gimp-desaturate drawable)
60          (gimp-edit-clear new-layer)
70          (gimp-image-add-layer img new-layer -1)
71           (gimp-palette-set-foreground couleur)
73          (gimp-edit-fill new-layer 0)
75    );; fin du let
77 (gimp-displays-flush)
80 (gimp-image-undo-group-end img) ;; fin d'historique d'annulation
90 ) ;; fin de la fonction
 
100 (script-fu-register "script-fu-filtre-couleur" ;; nom du script
110        "<Image>/Script-Fu/Filtre couleur" ;; position du script dans le menu
120        "Cree un calque filtre de couleur" ;; commentaires
130        "Auteur" ;; auteur
140        "Copyright" ;; copyright
150        "Date" ;; date
160        "RGB*" ;; types d'images supportés par le script
170        SF-IMAGE "Image" 0 ;; image dans lequel le calque est ajouté
180        SF-DRAWABLE "Drawable" 0 ;; calque actif de l'image
185       SF-COLOR "Couleur" '(255 0 0)
190 ) ;; fin du register

A ce stade le script fonctionne parfaitement (sauf si une sélection a été faite !) bien si ce n'est qu'il laisse la couleur rouge en premier plan alors qu'avant elle était probablement différente.

En ligne 37, nous allons stocker la couleur de premier plan active dans la variable old-color. La procédure gimp-palette-get-foreground nous y aidera. Ce sera encore une liste qui nous sera retournée, donc l'emploi de car sera indispensable.

(old-color (car (gimp-palette-get-foreground)))

Lorsque nous aurons finis de remplir le calque nous restituerons la couleur d'origine, soit en ligne 74 :

(gimp-palette-set-foreground old-color)

Ce qui nous donne :

10 (define (script-fu-filtre-couleur image drawable couleur) ;; declaration de la fonction
20 (gimp-image-undo-group-start img) ;; début d'historique d'annulation
30   (let* 
35           (
37           (old-color (car (gimp-palette-get-foreground)))
40           (width (car (gimp-image-width img)))
45           (height (car (gimp-image-height img)))
50           (new-layer (car (gimp-layer-new img width height RGBA-IMAGE "Nom du calque" 100 COLOR)))
55            )
57          (gimp-desaturate drawable)
60          (gimp-edit-clear new-layer)
70          (gimp-image-add-layer img new-layer -1)
71           (gimp-palette-set-foreground couleur)
73          (gimp-edit-fill  new-layer 0)
74          (gimp-palette-set-foreground old-color)
75    );; fin du let
77 (gimp-displays-flush)
80 (gimp-image-undo-group-end img) ;; fin d'historique d'annulation
90 ) ;; fin de la fonction
 
100 (script-fu-register "script-fu-filtre-couleur" ;; nom du script
110        "<Image>/Script-Fu/Filtre couleur" ;; position du script dans le menu
120        "Cree un calque filtre de couleur" ;; commentaires
130        "Auteur" ;; auteur
140        "Copyright" ;; copyright
150        "Date" ;; date
160        "RGB*" ;; types d'images supportés par le script
170        SF-IMAGE "Image" 0 ;; image dans lequel le calque est ajouté
180        SF-DRAWABLE "Drawable" 0 ;; calque actif de l'image
185       SF-COLOR "Couleur" '(255 0 0)
190 ) ;; fin du register

 

 

Valide XHTML 1.0 Strict
Valide CSS 2.0
Valide Accessibilité
Creative Commons License

Tous les documents et ressources sont sous un contrat Creative Commons.