3.4. Il primo script Script-Fu

Do you not need to stop and catch your breath? No? Well then, let's proceed with your fourth lesson — your first Script-Fu Script.

3.4.1. Creare uno script Text Box

Una delle operazioni più comuni che si intraprendono in GIMP è la creazione di un rettangolo con del testo per una pagina web, un logo o altro. Tuttavia quando si comincia non si sa quanto far grande l'immagine iniziale. Non si sa quanto spazio occuperà il testo con il font e la dimensione del font che si desidera.

This problem can be solved and automated with Script-Fu.

Si creerà quindi uno script, intitolato Text Box, che crea un'immagine delle dimensioni corrette per contenere una linea di testo immessa dall'utente. Si consentirà inoltre all'utente di scegliere il font, la dimensione del font e il colore del testo.

3.4.2. Modificare e memorizzare gli script

Finora abbiamo lavorato nella console Script-Fu. Ora, tuttavia, passeremo alla modifica dei file di script. I file di script dovrebbero essere file di testo semplice, modificabili in un editor di testo o di codice. Il nome che si dà non è così importante, se non per poter riconoscere lo script. Si consiglia di assegnare al file di script l'estensione «.scm».

Where you place your scripts is a matter of preference. In GIMP's folder preferences you can see in which folders GIMP looks for scripts. It is also possible to add a new folder there. The folder where GIMP stores its own scripts is usually not the best choice for your scripts, but for the rest feel free to choose what suits you best.

3.4.3. Lo stretto necessario

Ogni script Script-Fu definisce almeno una funzione che è la funzione principale dello script. Questa è la funzione dove si fa il lavoro.

Ogni script deve registrarsi nel database delle procedure per poter risultare accessibile a GIMP.

Si definisca dapprima la funzione principale:

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

Here, we've defined a new function called script-fu-text-box that takes four parameters, which will later correspond to some text, a font, the font size, and the text's color. The function is currently empty and thus does nothing. So far, so good — nothing new, nothing fancy.

3.4.4. Convenzioni per i nomi

Le convenzioni sui nomi di Scheme sembrano dare la preferenza a lettere minuscole con trattini, convenzione seguita nel dare il nome alla funzione. Tuttavia ci si è allontanati dalla convenzione con gli argomenti. Si sono preferiti nomi più descrittivi per argomenti e variabili e quindi si è aggiunto il prefisso "in" agli argomenti in modo da distinguerli rapidamente come argomenti passati allo script piuttosto che creati al suo interno. Si è usato il prefisso "the" per variabili definite all'interno dello script.

Fa parte di una convenzione di GIMP di denominare le funzioni degli script script-fu-abc, poiché quando vengono elencate nel database delle procedure sono tutte raggruppate sotto il prefisso script-fu. Ciò aiuta anche a distinguerle dai plug-in.

3.4.5. Registrare la funzione

Reistrare ora la funzione in GIMP. Ciò si ottiene richiamando la funzione script-fu-register. Quando GIMP legge uno script, esegue questa funzione che registra lo script nel database delle procedure. Si può posizionare questa funzione in ogni parte dello script, ma di solito la si posiziona alla fine, dopo tutto il codice.

Ecco il listato per registrare questa funzione (si chiariranno a breve gli argomenti):

  (script-fu-register
    "script-fu-text-box"                        ;function 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>/Filters/Tutorial")
      

Salvare queste funzioni in un file di testo con suffisso .scm in una sottocartella della propria cartella degli script, con lo stesso nome del file script, poi riavviare GIMP. Il nuovo script apparirà come Filtri → Tutorial → Casella di testo.

Se si invoca questo nuovo script naturalmente non succede nulla, ma si possono osservare le richieste di parametri definite quando si registra lo script (ulteriori informazioni più avanti).

Infine, se si richiama il Navigatore di procedure (Aiuto → Navigatore di procedure), si noterà che lo script ora appare nel database.

3.4.6. Passi per la registrazione dello script

Per registrare lo script in GIMP si richiama la funzione script-fu-register, passando i sette parametri richiesti e aggiungendo gli argomenti dello script insieme con una descrizione e un valore predefinito per ciascun argomento.

Gli argomenti richiesti

  • Il nome della funzione definita. Questa è la funzione che viene chiamata quando si invoca lo script (il punto di entrata). È obbligatoria perché si possono definire altre funzioni all'interno dello stesso file e GIMP deve sapere quale tra queste funzioni richiamare. Nell'esempio si è definita solo una funzione, text-box, che è stata registrata.

  • L'etichetta di menu è il nome che verrà visualizzato nel menu. Per specificare la posizione, vedere Sezione 3.4.9, «Registrare la posizione di menu».

  • Una descrizione dello script che viene visualizzata nel Navigatore delle procedure.

  • Un nome autore (l'autore dello script).

  • Informazioni sul Copyright.

  • La data di creazione dello script o quella della sua ultima revisione.

  • The types of images the script works on. This may be any of the following: RGB, RGBA, GRAY, GRAYA, INDEXED, INDEXEDA. Or it may be none at all — in our case, we're creating an image, and thus don't need to define the type of image on which we work.

3.4.7. Registrare i parametri dello script

Dopo aver elencato gli argomenti necessari occorre elencare gli argomenti che corrispondono a quelli necessari al nostro script. Quando si elencano questi argomenti si danno indicazioni sui loro tipi, questo serve per la finestra di dialogo che compare quando l'utente seleziona lo script. Si deve anche fornire un valore predefinito.

Questa sezione del processo di registrazione ha il seguente formato:

Tipo argomento

Descrizione

Esempio

SF-IMAGE

Se lo script opera su un'immagine già aperta, questo dovrebbe essere il primo argomento dopo quelli richiesti. GIMP passa un riferimento all'immagine in questo parametro.

3

SF-DRAWABLE

Se lo script opera su un'immagine aperta questo dovrebbe essere il secondo argomento dopo SF-IMAGE. Si riferisce al livello attivo. GIMP passa un riferimento al livello attivo in questo parametro.

17

SF-STRING

Accetta stringhe.

"Del testo"

SF-COLOR

Indica che questo argomento richiede un colore.

'(0 102 255)

SF-TOGGLE

Viene mostrata una casella di scelta per richiedere un valore booleano.

TRUE o FALSE (vero o falso)

3.4.8. Le API dei parametri Script-Fu [5]

[Nota] Nota

Beside the above parameter types there are more types for the interactive mode, each of them will create a widget in the control dialog. You will find a list of these parameters with descriptions and examples in the test script plug-ins/script-fu/scripts/test-sphere-v3.scm shipped with the GIMP source code.

Tipo argomento

Descrizione

SF-ADJUSTMENT

Crea un widget di regolazione nella finestra di dialogo.

SF-ADJUSTMENT "etichetta" '(valore inferiore superiore passo_inc pagina_inc cifre tipo)

Elenco argomenti del widget
Su Windows, qua

scriptable> 5" scripts. I scriptable> 5" scripts. I pa Figura 14.29. Opzione spaziatura

> della funzione definita. Questa è la funzione che viene chiaohes ,body> Su Wsello > 8 )M 5 13.5ming a seleolass="c tant">SF-TOGG <sprom thde> metao no</p> lass="constant">SF-TOGGLE</cotra ordinato</span> per posizionare il centro delle coordinate.</p> </li> <li class="listitem"> <p><spanreare il primo punto del tracciato. Spostare il mouse in un'altra ple <acronym i 09text/css" /> <l/p> </li> <li class="listitem"> <p><spanode></p> 8ize-splashscreen.html">3. Pergtodaoia </tbody> nt">SF-ADJUSTMENT</code></p> </td> <td> specificata, =IMP nip genererà una miniatura per esso. Quest'opzione permette di prevenire la generazione di una miniatura per file molto c taniatura tr class="s '(generaata,"WGLCetao no," generazione di u <pADJUSTMENT "etigennaerry" 09text/cse passo_inc pagina_inc cifre tipo)</p> <div class="segmentedlist"><div class="title"><strong><span class="title">Elenco argomenti del widget</span></strong></div><table border="0"><thead><tr class="segtitle"><th>Elemento</th><th>Descrizione</th></tr></thead><tbr a layer effect are also,reak" /> �����������'M prevenire la.893id="gimp-using���'M prevenir di prevenire> 5" scripts.)FOGGRhead><tr class="segtit_ 9 OLOR</code></p> </td> <td> molto c t di una m,(218NT "etigennaeotoe <dt id="ientry-id58ento</th><th>De8 di prevenire la generazi prevenire la generazi prevenire la generazi prevenirrrrrrrrrrrrrrr consecutivi creati da un'operlist"><div/th><th>Descrizionethead><tbr a layer inare e rilasciare<p> </div> (evenire la gea window attache Go ahead and save your script, and try it out after ressilg><span clareak" /> ylesheets V s="quote">Âone</th></tr></thead><tbr a layer effect are also,reak" /> rizionetheam,(218NT "eti/div> cript works on. Tho works on. Tho workul cript 0s on. Tho (. WAg><span clareak" /> ylesheets V s="quote">Âone</th <tdclass=" </td> </tr> </tbody> a gea window attache voee, s="quote">Âone</th></tr></theade-as" sort="3 2uck.html"><img srant">SF-TOGGLE</code></p> tbody> aon. Tho h></tr></thead><tbr a layer effect acode></p> tbodsemlnmenuitem">Semi-Flatten…</span> (see <a class="xref" href="gimp-fil <p> aque center of that pplicazioni supportanorefloating poin</th></tr><seml workul cript (span> le dimensioni,listitem"> attache voee, (. WAg><span,ct acode></p>, ) your plug-inld> </tr> </tbody> a geo window attache voee, s="quote">Âone</th></tr></theade-as" sort="3 2uck.html"><img srant">SF-TOGGLE</code></p> tbody> aon. Tho h></tr></thead><tbr a layer effect acode></p> tbodsemlnmenuitem">Semi-Flatten…</sde the above parametten.h�����00006427, 1997" lnmenuitem">SemFlatten…</sivo. Se il tracciato non è chiuso, il sistema cercherà di indovinarne la forma e poi la riempirà. Comunque, s��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������
ElementoDescrizione
(te">pa (te">pa
method is whs/prev.png"MENT

lass="constant">SF-TOGGLE

 Ðstant">SF7TOGGLE

Crea un widget di ragolazione nlass="note" style="margin-left: 0.5in; margin-rigo non5incts">6.6. Merging go non5incts">6.6. Merging immess metao no

lass="constant">SF-TOGGLE

 Ðstcne nlass="notth>Descrizionn>». What this means for us, nzione definita. A' >

*or us, nzione definita. A' or us,d> e file SF-COLOR

SF-COLOR

SF-COLOR

SF-COLOR