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 3570 fois
Apprendre  ›  Écrire un script-fu  ›  Basic Scheme 2

 

Scheme : Traduction Basic Scheme partie 2

 

Originale sur http://www.linux-mag.com/

 

Intention

UNIX (et par association, Linux) fournit à l'utilisateur un environnement plein de possibilités. Pour transformer ces possibilités en réalité, un utilisateur Unix doit être technique aux deux sens du mot. Bien sûr, il doit comprendre la technologie, mais pour vraiment briller, il doit comprendre et apprécier la bonne technique.

UNIX est rempli d'outils qui, par une compréhension encore inexprimée commune à la Philosophie Unix, travaille bien avec chacun d'entre eux. À l'utilisateur créateur qui peut connecter et combiner ces outils puissants, UNIX peut être très utile.

Avec cela en mémoire, bienvenue à notre colonne d'outils électroniques. Notre but est ici de vous aider à découvrir différentes façons d'obtenir le meilleur de tout le logiciel utile qui est là et démontrer comment la puissance de ces outils peut vraiment être dans les mains d'un utilisateur habile et technique.

Nous commençons ce mois-ci par un regard sur le GIMP. Un des points forts du GIMP était toujours ses scripts. En fait, il est largement reconnu que cela est une des caractéristiques les plus fraîches du GIMP. Mais quand on parle de cela, il n'y a pas vraiment beaucoup de personnes qui peuvent honnêtement dire, "je connais le Script-fu."

La partie du problème est Scheme, le langage utilisé pour écrire des scripts pour GIMP. C'est un langage semblable a Lisp qui semble amusant comparée à la plupart des langages dans la ligne du courant dominant et c'est assez pour dissuader la plupart des gens de l'essayer. Pour quelqu'un qui veut vraiment apprendre le Scheme, alors, le GIMP est une bonne chose pour commencer, parce que vous serez capables d'obtenir des résultats utiles relativement rapidement en raison de la richesse de son interface de programmation. C'est même parfois un peu trop riche.

L'autre problème est que l'API de GIMP peut parfois sembler trop grand. Heureusement, il y a une façon de transformer cette API formidable en quelque chose qui est en réalité compréhensible par de simples mortels. Mais nous y arriverons dans une minute. D'abord, jetons un coup d'œil à un très petit sous-ensemble de Scheme.

 

Un Cours intensif en Scheme

Scheme a une syntaxe simple et uniforme comparée à la plupart des autres langages, mais il n'y a encore aucune voie correcte pour l'expliquer dans cet espace limité. Avec cela en mémoire, nous couvrirons le strict minimum de Scheme dont vous aurez besoin pour commencer avec les scripts GIMP. Heureusement, il est vrai que peu de connaissance peut mener loin, ainsi si vous ne connaissez pas le Scheme, continuer de lire.

La première chose que remarque les gens quand ils regardent Scheme est toutes les parenthèses emboîtées les unes les autres. Quoi que vous fassiez, ne vous affoler pas. Il y a un concept très simple derrière cela et il y a de bonnes chances que vous le compreniez vite. Sémantiquement, ce n'est pas très différent du HTML. Par exemple, ce sui suit :

<ul><li><b>bold</b></li><li><i>italic</i></li></ul>

ressemblerait en Scheme à :

(ul (li (b "bold"))(li (i "italic")))

Chaque paire de correspondance de parenthèses forme ce qui est appelé une s-expression. Le "s" est ici pour "symbolique", parce que les s-expressions contiennent d'habitude des informations symboliques (comme la fonction et des noms de variables) à l'intérieur d'eux. Des informations littérales (comme des chaînes ou des nombres) sont représentées de la façon habituelle - les nombres sont écrits dans la notation décimale et les chaînes sont entourées par un jeu de guillemets, comme dans l'exemple "hardi". Une s-expression peut aussi contenir d'autres s-expressions emboîtés, en faisant une bonne notation pour stocker des données aussi bien qu'écrire le code.

Quand vous utilisez des s-expressions pour représenter le code, le premier article représente la fonction que vous voulez utiliser et tout après ce que l'on considère comme un paramètre de la fonction. C'est une surprise pour beaucoup de personnes car dans Scheme, presque tout est fait avec une fonction. Même pour des maths de base, qui serait :

5 + 9 / 3

dans la plupart des autres langues, est exprimé en Scheme :

(+ 5 (/ 9 3))

Cela peut prendre un peu de temps pour intégrer. D'abord, l'ordre des choses peut sembler étrange. Si vous êtes utilisateurs d'une "notation traditionnelle" (c'est-à-dire, lorsque la première équation est écrite - avec les opérandes étant séparés par les opérateurs), alors l'entraînement pour utiliser "la notation de préfixe" (lorsque la deuxième équation est écrite - avec les opérateurs placés avant les opérandes) pourrait prendre un peu de temps. Ne vous inquiétez pas - cela n'est pas aussi troublant qu'il y parait une fois que vous attrapez le coup de main.

Au-delà de notre simple exemple arithmétique ci-dessus, il y a deux fonctions en Scheme que vous devrez connaître pour vous aider à comprendre la deuxième moitié de cet article.

set! : c'est l'équivalent du = (ou l'assignement), l'opérateur que l'on voit dans la plupart des autres langages. Son but est simplement d'assigner une valeur donnée à une variable particulière. Par exemple, la chose suivante assigne 5 à la variable a et la liste de nombres (1 2 3) à b.

(set! a 5)< (set! b '(1 2 3))

Notez que la citation simple avant le (1 2 3) est très importante. Il dit à Scheme que la s-expression suivante est en réalité des données et pas du code. Sans la citation simple, l'interprète Scheme aurait essayé de traiter 1 comme une fonction et aura misérablement échoué.

car : une s-expression est une liste de choses, mais ce n'est pas une liste ordinaire. En Scheme, les listes sont composées de seulement deux choses - une tête, qui est le premier article dans la liste et une queue, qui est tout le reste (et qui est aussi une liste).

car est la fonction pour obtenir le chef d'une liste. Par exemple, (car ' (3 2 1)) retourne 3. C'est très utile, parce que les fonctions dans l'API de GIMP rendent presque toujours des listes; même quand seulement une chose est rendue, il est rendu dans une liste à un élément, donc il est nécessaire de connaître cette opération de liste de base.

C'est à peine un survol de ce que Scheme fournit, mais c'est assez pour le moment. Il y a déjà beaucoup de bon tutoriels Scheme de toute façon, ainsi pourquoi ne pas profiter d'eux ? Vous pouvez jeter un coup d'œil aux Ressources pour plus d'informations.

 

L'API de GIMP

Maintenant que nous connaissons un petit peu le Scheme, nous pouvons commencer à jeter un coup d'œil sur la manière dont il est appliqué au GIMP.

La façon la plus facile de le faire est d'utiliser le Navigateur DB, qui est disponible sous (Xtns-&gt; DB le Navigateur ...). Comme vous pouvez voir, le GIMP a littéralement des centaines de fonctions Scheme liées directement à son API interne. (NdT : Exts -> Base de procédure)

Bien que chaque fonction soit documentée, leurs quantités peut être accablant. Heureusement, il y a un tour agréable à l'étude de cette API.

Dans le Navigateur DB, tapez le mot "new" dans la boîte d'entrée de texte dans le coin en bas et cliquez ensuite sur la Recherche par nom . La liste devrait être beaucoup plus petite maintenant; les cinq premières fonctions sont particulièrement intéressantes. Cette recherche est démontrée dans la Figure 1 ci-dessous

Figure 1 : les cinq fonctions de construction sont inscrites dans la fenêtre en haut à gauche.

Ces cinq fonctions sont des constructeurs pour les cinq objets dont l'API de GIMP entier tourne autour. Si vous pouvez comprendre exactement ce que chacun de ces objets représente, donc vous êtes sur le bon chemin à la capacité au script de GIMP.

Nous allons commencer par les créations de certains de ces objets. Afficher la console de Script-fu (de Xtns - > Script-Fu - > Console ...) (Ndt : Exts - > Script-fu - > Console script-fu) afin de taper le code Scheme. Maintenant, commençons par la chose suivante avec l'Inscription de Celui.

  
; cree une image
  (set! image (car (gimp-image-new 320 240 RGB)))

  ; les images ont besoin de calques
  (set! layer
	 (car
		(gimp-layer-new
		   image 320 240 RGB_IMAGE "layer"  100.0 0)))
  (gimp-image-add-layer image layer -1)

; afficher notre image
(set! window (car (gimp-display-new image)))
(gimp-edit-clear layer)

; faire un dessin
(set! points (cons-array 4 'double))
(aset points 0 0)   ; (x0, y0)
(aset points 1 0)
(aset points 2 320) ; (x1, y1)
(aset points 3 240)
(gimp-palette-set-foreground '(255 0 0))
(gimp-paintbrush-default layer 4 points)
			

Image : l'objet le plus important dans le GIMP est l'objet Image, sans lequel il n'y aurait rien dans "GIMP" sur la ligne 2, l'image RGB, 320x240 pixel, est créé et assigné à image.

Le GIMP a un concept abstrait d'un objet Image. À part les propriétés comme la largeur et la hauteur, une image peut être pensée comme une collection d'objets de Calque.

Couche (calque) : les Couches sont très importantes parce que sans elles, il n'y aurait rien pour dessiner. Aux lignes 5 à 9, un objet de Couche est créé et ensuite la couche est ajoutée à image.

Canal : le but des canaux est de fournir une vue sélective de la coloration d'une image. Par exemple, toutes les images de RGB ont un canal rouge, vert et bleu.

Si vous avez voulu affecter seulement "le bleu" d'une image, vous pourriez mettre hors service les canaux rouges et verts et utiliser seulement le canal bleu. C'est un concept utile mais plutôt avancé, donc nous passerons celui-ci pour le moment.

Affichage : Bien que non strictement exigé, il est agréable d'observer notre image telle qu'elle est. Pour ce faire, un objet Affichage est ouvert sur la ligne 12. Notre couche pourrait être remplie de déchets, donc c'est une bonne idée d'utiliser la fonction "gimp-edit-clear" pour s'assurer que nous commençons avec un calque propre. (On espère que le constructeur de couche se comportera plus ainsi dans l'avenir.) Notons que comme vous écrivez le code Scheme dans la Console de Script-fu, les changements de l'image se feront en mode interactif.

Dessin : Dans la terminologie C ++, un Dessin serait une classe de base abstraite dont la Couche et le Canal sont les sous-classes. Dessin est quoi que ce soit qui peut être fait. Par exemple, on peut utiliser des canaux pour exécuter des effets colorés avancés. Mais pour le moment nous persévérerons juste sur une couche.

Il y a beaucoup, beaucoup de fonctions dans l'API de GIMP pour manipuler les dessins. Aux lignes 16 à 22, "gimp-paintbrush-default" est utilisé pour dessiner une ligne sur le calque. Puisque cette fonction a besoin d'un tableau (de x, y) les coordonnées, la fonction cons-array est utilisée pour allouer un tableau double et la fonction d'aset est utilisée pour le remplir de valeurs. Avant que la ligne ne soit dessinée, nous changeons notre couleur de premier plan de défaut pour un rouge vif en utilisant gimp-palette-set-foreground. Si vous avez tout tapé correctement, vous devriez avoir quelque chose qui ressemble à ce que la Figure 2 montre ci-dessous.

Figure 2: un simple dessin.

 

De plus grandes et meilleures choses...

Maintenant que nous avons une base de connaissance pour travailler, nous pouvons nous déplacer sur des sujets plus intéressants. Voyez les Ressources pour commencer votre auto apprentissage.

 

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.