3.4. El vostre primer codi de Script-Fu

No necessiteu parar i respirar? No? Bé, doncs llavors procedirem amb la quarta lliçó, el vostre primer codi de Script-Fu.

3.4.1. Creació d'un script: un quadre de text

Una de les operacions més comunes que es realitza amb el GIMP és crear un quadre amb algun text dins per a una pàgina web, o un logotip. Però quan es comença, mai no se sap la mida adequada de la imatge, ni l'espai que ocuparà el text amb la mida de la lletra.

Els mestres de Script-Fu (i els estudiants) reconeixen ràpidament que aquest problema pot ser fàcilment resolt i automatitzat amb l'Script-Fu.

Crearem un script anomenat «Text Box», que crearà una imatge amb la mida correcta, ajustada a una línia de text que l'usuari ha introduït. També deixarem a l'usuari triar la lletra tipogràfica, la seva mida i el color del text.

3.4.2. Editeu i deseu els vostres scripts

Fins ara hem treballat en la consola de Script-Fu. Ara, no obstant això, anem a editar fitxers de text dels scripts.

On es col·loquen els vostres scripts és qüestió de preferències. Si teniu accés al directori de scripts per defecte del GIMP, podeu col·locar-los allí. Tanmateix, és preferible deixar els scripts personals al directori personal d’scripts, per mantenir-los separats dels ja instal·lats per defecte.

En el directori .gimp-2.8, que el GIMP ha creat dins el directori personal, hi hauríeu de trobar un directori anomenat scripts. El GIMP hi buscarà sistemàticament un directori pels scripts dins el vostre directori .gimp-2.8, i hi afegirà els scripts d'aquest directori dins la base de dades de l'Script-Fu. Així doncs, hi hauríeu de col·locar els vostres scripts personals.

3.4.3. Les necessitats essencials

Cada script de Script-Fu defineix almenys una funció, que és la funció principal de l'script. És on fa la feina.

Cada script ha de registrar-se també en la base de dades de procediments, de manera que s'hi pugui accedir amb el GIMP .

Es defineix primer la funció principal:

        (define (script-fu-text-box inText inFont inFontSize inTextColor))
      

Aquí s'ha definit una nova funció anomenada script-fu-text-box amb quatre paràmetres que més tard correspondran al text, a una mida de lletra i al color del text. La funció està actualment buida i no fa res. Fins aquí tot bé - res de nou, res d'especial.

3.4.4. Convencions de nomenclatura

Les Convencions de nomenclatura de l'Scheme prefereixen minúscules amb guions i s'han respectat dins el nom de la funció. No obstant això, es parteix de la convenció amb els paràmetres. Es volen noms més descriptius pels paràmetres i variables, i s'hi afegeix el prefix in als paràmetres, així es pot veure ràpidament quins valors entren en l'script, en comptes dels que es creen en ell. S'utilitza el prefix the per a les variables definides en l'script.

És la convenció del GIMP per nomenar les funcions del vostre script script-fu-abc, perquè així apareixeran en la base de dades de procediments, totes elles es mostraran sota l'Script-Fu quan s'estiguin llistant les funcions. Això també ajuda a distingir-les dels connectors.

3.4.5. Registre de la funció

Ara, registrem la funció amb el GIMP. Això es fa cridant la funció script-fu-register. Quan el GIMP llegeixi un script, executarà aquesta funció, que registrarà l'script en la base de dades de procediments. Podeu situar aquesta funció on vulgueu dins el vostre script, però normalment se situa al final, després de la resta de les línies del codi.

Aquest és el llistat de registre d'aquesta funció (s'explicaran tots aquests paràmetres de seguida):

  (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")
      

Si deseu aquestes funcions en un fitxer de text amb el sufix .scm al directori dels vostres scripts, seleccioneu FiltresScript-FuActualitza els scripts, aquest script nou apareixerà com FitxerCreaTextText Box.

Si crideu aquest nou script, no farà res, per descomptat, però podeu veure les anotacions que es van fer quan es va registrar l'script (més informació del que es va fer, es mostrarà després).

Finalment, si obriu el Navegador de procediments (AjudaNavegador de procediments), veureu que l'script apareix en la base de dades.

3.4.6. Passos per registrar l'script

Per registrar l'script en el GIMP, es cridarà la funció script-fu-register, s'ompliran els set paràmetres requerits i s'hi afegiran els nostres paràmetres, junt amb una descripció i els valors per defecte de cada paràmetre.

Els paràmetres requerits

  • El nom de la funció que es defineix. Això és la crida de la funció quan es crida el nostre script (el punt d'entrada a l'script). És important perquè es poden definir funcions addicionals sota el mateix fitxer, i el GIMP necessita saber quines d'aquestes funcions crida. En aquest exemple, només es defineix una funció, «text-box», que s'ha registrat.

  • La ubicació en el menú on s'insereix l'script. La ubicació exacta de l'script s'especifica com un camí en Unix, amb l'arrel del camí que és <Image>.[6]

    Si el vostre script no opera sobre una imatge existent (i crea una imatge nova, com farà «Text Box»), voldreu inserir-lo en el menú de la imatge. S'hi pot accedir a través de la barra del menú de la imatge, fent clic dret a la finestra de la imatge, fent clic sobre el botó del menú en la cantonada superior esquerra, o prement F10.

    Si el vostre script està intentant treballar sobre una imatge que s'està editant, voldreu inserir-lo en el menú de la finestra de la imatge. La resta del camí apunta a la llista dels menús, menús i submenús. Registreu el vostre script dins FitxerCreaTextText Box.

    Si us fixeu, el submenú Text, dins el menú Fitxer/Crea, no hi era al començament: el GIMP crea automàticament menús que no existeixen.

  • Una descripció del vostre script, que es mostrarà en el navegador de procediments.

  • El vostre nom (l'autor de l'script).

  • Informació dels Drets d'autor.

  • La data en què es va fer l'script, o la data de la darrera revisió.

  • Els tipus d'imatges amb les que treballa l'script. Podrien ser: RGB, RGBA, GRAY, GRAYA, INDEXED, INDEXEDA. O no podrien ser cap d'elles, en aquest cas, s'està creant una imatge i no cal establir-ne el tipus.

Figura 13.4. El menú de l'script.

El menú de l'script.

3.4.7. Registre dels paràmetres de l'script

Una vegada que s'han llistat els paràmetres requerits, cal precisar quins són els que corresponen amb les necessitats del nostre script. En llistar aquests paràmetres, es donen indicacions del tipus que són; això és pel diàleg que apareix quan l'usuari selecciona l’script. També es poden proporcionar valors per defecte.

Aquesta secció del procés de registre té el següent format:

Tipus de paràmetre

Descripció

Exemple

SF-IMAGE

Si el vostre script opera en una imatge, hauria de ser el primer paràmetre després dels paràmetres requerits. El GIMP transmetrà una referència a la imatge en aquest paràmetre.

3

SF-DRAWABLE

Si el vostre script opera sobre una imatge oberta, hauria de ser el segon paràmetre després del paràmetre SF-IMAGE. Es refereix a la capa activa. El GIMP transmetrà una referència a la capa activa en aquest paràmetre.

17

SF-VALUE

Accepta nombres i cadenes de caràcters. Tingueu en compte que les cometes han d'estar precedides pel caràcter d'escapament, per la qual cosa és millor utilitzar SF-STRING.

42

SF-STRING

Accepta cadenes de caràcters.

«Un text»

SF-COLOR

Indica que un color es requereix en aquest paràmetre.

'(0 102 255)

SF-TOGGLE

Es mostra una casella, per introduir un valor Booleà.

TRUE o FALSE (Vertader o Fals)

3.4.8. Els paràmetres de l'API de Script-Fu[7]

[Nota] Nota

Al costat dels tipus de paràmetres anteriors n'hi ha d'altres en mode interactiu, cadascun d'ells crea un giny en el control del diàleg. Trobareu una llista d'aquests paràmetres amb descripcions i exemples en l'script de prova plug-ins/script-fu/scripts/test-sphere.scm subministrat amb el codi font del GIMP.

Tipus de paràmetre

Descripció

SF-ADJUSTMENT

Crea un giny d'ajustament en el diàleg.

SF-ADJUSTMENT "label" '(value lower upper step_inc page_inc digits type)

Llista d'arguments del giny
ElementDescripció
"label"Text imprès abans del giny.
valorValor imprès al principi.
lower / upperEls valors mini / maxi (rang d'elecció)
step_incIncrementa/redueix el valor.
page_incIncrementa/redueix el valor utilitzant les tecles Pàgina.
dígitsDígits després del punt (part decimal).
tipusUn de: SF-SLIDER o 0, SF-SPINNER o 1

SF-COLOR

Crea un botó de color en el diàleg.

SF-COLOR "label" '(red green blue)

o

SF-COLOR "label" "color"

Llista d'arguments del giny
ElementDescripció
"label"Text imprès abans del giny.
(vermell verd blau)Llista dels tres valors per als components vermell, verd i blau.
"color"Nom de color en notació CSS.

SF-FONT

Crea un giny per a la selecció de la lletra tipogràfica en el diàleg. Retorna un nom de la lletra com una cadena. Hi ha dos nous procediments nous del gimp-text per facilitar l'ús d'aquest paràmetre de tornada:

(gimp-text-fontname image drawable x-pos y-pos text border antialias size unit font)

(gimp-text-get-extents-fontname text size unit font)

on el paràmetre «font» és el nom de la lletra tipogràfica que s'obté. La mida especificada en el «fontname» s'ignora. S'utilitza només al gestor de la lletra. Us preguntarà que doneu un valor útil (24 píxels és una opció correcta).

SF-FONT "label" "fontname"

Llista d'arguments del giny
ElementDescripció
"label"Text imprès abans del giny.
"nom de la tipografia"Nom de la lletra tipogràfica per defecte.

SF-BRUSH

Crearà un giny en el diàleg de control. El giny consisteix en una zona de previsualització (que quan es prem produeix una previsualització emergent) i un botó amb l'etiqueta «...». El botó obre un diàleg on es poden seleccionar els pinzells i modificar-ne cadascuna de les característiques.

SF-BRUSH "Brush" '("Cercle (03)" 100 44 0)

En aquest cas, el diàleg del pinzell s'obrirà amb el pinzell per defecte Cercle (03) opacitat 100, espaiat 44 i en mode normal (valor 0).

Si aquesta selecció no canvia el valor passat a la funció com a paràmetre, serà '("Cercle (03)" 100 44 0).

SF-PATTERN

Crearà un giny en el diàleg de control. El giny consisteix en una zona de previsualització (que quan es prem produeix una previsualització emergent) i un botó amb l'etiqueta «...». El botó obre un diàleg on es poden seleccionar els patrons.

SF-PATTERN "Pattern" "Maple Leaves"

El valor retornat quan es crida l'script és una cadena que conté el nom del patró. Si la selecció anterior no s'ha modificat, la cadena contindrà «Fulles d'auró».

SF-GRADIENT

Crearà un giny en el diàleg de control. El giny consisteix en un botó que conté una previsualització del degradat seleccionat.

Si es prem el botó, apareixerà un diàleg de selecció del degradat.

SF-GRADIENT "Gradient" "Deep Sea"

El valor retornat quan es crida l'script és una cadena que conté el nom del degradat. Si la selecció anterior no s'ha modificat, la cadena contindrà «Mar profund».

SF-PALETTE

Crearà un giny en el diàleg de control. El giny consisteix en un botó que conté el nom de la paleta seleccionada.

Si premeu el botó, apareixerà un diàleg de selecció de la paleta.

SF-PALETTE "Palette" "Named Colors"

El valor retornat quan es crida l'script és una cadena que conté el nom del patró. Si la selecció anterior no s'ha modificat, la cadena contindrà «Colors amb nom».

SF-FILENAME

Crearà un giny en el diàleg de control. El giny consisteix en un botó que conté el nom d'un fitxer.

Si premeu el botó, apareixerà un diàleg de selecció del fitxer.

SF-FILENAME "label" (string-append "" gimp-data-directory "/scripts/beavis.jpg")

El valor retornat quan es crida l'script és una cadena que conté el nom del fitxer.

SF-DIRNAME

Només és útil en mode interactiu. Molt semblant a SF-FILENAME, però el giny creat permet triar un directori en lloc d'un fitxer.

SF-DIRNAME "etiqueta" "/var/tmp/images"

El valor retornat quan es crida l'script és una cadena que conté el nom del directori.

SF-OPTION

Crearà un giny en el diàleg del control. El giny és un quadre combinat (combo-box) que mostra les possibles opcions.

La primera opció és l'opció per defecte.

SF-OPTION "label" '("option1" "option2")

El valor retornat quan es crida l'script és el nombre de l'opció triada, 0 correspon a la primera opció.

SF-ENUM

Crearà un giny en el diàleg de control. El giny és un quadre combinat que mostra tots els valors possibles per un tipus d'enumeració donat. Ha de ser el nom d'enumeració registrada, sense el prefix del GIMP. El segon paràmetre especifica el valor per defecte.

SF-ENUM "Interpolació" '("InterpolationType" "lineal")

El valor retornat quan es crida l'script correspon al valor enumerat triat.



[6] Abans de la versió 2.6, <Toolbox> també es podia utilitzar, però ara, el menú de la caixa d'eines s'ha tret i no es pot utilitzar més.

[7] Aquesta secció no és part del programa d'aprenentatge original.