Tutorial Script-fu

Source: http://www.seul.org/~grumbel/gimp/script-fu/script-fu-tut.html

Il seguente tutorial è stato scritto nel 2000 e le versioni più recenti di Gimp potrebbero non supportare appieno gli esempi qui riportati.

Le segnalazioni possono essere inviate alla GitHub issue tracker

Tutorial Script-fu

Tabella dei Contenuti

  1. Preface
  2. Introduction
  3. First step on the road to a Script-Fu
  4. Reproducing the steps in the Script-Fu Console
  5. Writing down the Script-Fu
  6. Common Pitfalls
    1. Return Values
    2. R5SR Compliance
  7. Debugging
  8. Things you can’t do in Script-Fu
  9. Examples
  10. References
  11. ChangeLog

Prefazione

Il seguente tutorial è stato scritto per The Gimp 1.1.24. Alcune cose qui descritto non funziona o funziona in modo diverso con il Gimp 1.0 .x.

Introduzione

Questo è un breve tutorial in Script-Fu programmazione. Cercherò di dare una breve introduzione al mondo di Script-Fu e spiegare come le cose fondamentali. Dobbiamo creare uno script completo-fu passo-passo. L’obiettivo è di avere una Script-Fu , che produce un testo in stile metallico. Presumo che il lettore abbia una conoscenza base del sistema, che è il linguaggio di programmazione che viene utilizzato in Script-Fu

Primo passo sulla strada di un Script-Fu

Ok, adesso dobbiamo fare il primo passo: cosa vogliamo fare in Script-Fu , cerchiamo di fare prima con The Gimp come normale. Questo è importante, perché abbiamo bisogno di sapere esattamente quale operazione abbiamo bisogno, e in quale ordine abbiamo bisogno di chiamarli.

Così creiamo la nostra immagine di prova, prima di creare una nuova immagine rgb ( File->Nuova Immaginee inserire un testo in, dire la parola “Test”.

Quindi abbiamo duplicato il testo e applicare un gradiente metallico al livello superiore.

Allora si prende il secondo livello del testo e il suo allargamento a bit, per farlo, utilizziamo la alfa-funzione di selezione e crescere la selezione di alcuni pixel. Quindi dobbiamo riempire la selezione con lo stesso gradiente, ma in un altro orientamento.

In ultimo, si uniscono gli strati e applicare una norma ombra. Quando si è finito, ci siamo auto-ritagliare l’immagine, per rimuovere tutte le parti superflue dell’immagine.

Riprodurre i passi della Script-Fu Console

Ok: l’immagine sembra ora come ci aspettavamo che, in modo di riassumere che cosa abbiamo fatto:

  1. Creare una nuova immagine
  2. Creare un livello di testo
  3. Duplicare il livello del testo
  4. Ingrandire il basso livello del testo
  5. Riempire i livelli di testo con un gradiente
  6. Unire i livelli di testo
  7. Applicare un effetto ombra
  8. Unisci tutti i livelli
  9. Auto-ritagliare l’immagine

Il compito è ora di riprodurre questi passi nel Script-Fu Console :dove è possibile inserire i comandi Script-Fu e metterle alla prova. Utilizzare la Console per testare tutte le nuove funzioni che non sono pratico con; nella Console è possibile più o meno il debug script scritti. È più facile se si prova ogni riga di Script-Fu prima nella Console e poi parallela a scrivere il Script-Fu , una volta i comandi agiscono come ci si aspetta.

Per farlo, occorre aprire la Console Script-Fu (Xtns -> Script-fu- >Consol).  Quando la console è aperta, fare clic su Sfoglia… NELL’angolo in basso a sinistra; e questo ci porta alla DB Browser ,dove è possibile effettuare la ricerca per le funzioni che è possibile accedere a da Script-Fu . Con il nome della funzione, ma anche una descrizione degli argomenti che attende e una descrizione generale quali la funzione.

Ora è il momento di riprodurre il nostro primo passo per la creazione di un’immagine, così abbiamo bisogno di una funzione per creare una nuova immagine. La maggior parte delle funzioni che potreste trovare in DB Browser hanno nomi simili a quelli del menu di Gimp. Dopo una piccola ricerca per le “nuove” troviamo la funzione gimp-image-nuovo ,che suona come quello che stiamo cercando. Entriamo in console:

(Gimp-image-nuovo 256 256 RGB)

E otterremo un output come segue:

=> (Gimp-image-nuovo 256 256 RGB)

 

(3)

La prima linea è semplicemente il comando è stato eseguito, la seconda riga è il valore di ritorno della funzione. Come si può leggere nel DB Browser, questa è l’ID della nuova immagine. È possibile utilizzare l’ID come argomento alle funzioni della console. Il valore di ritorno è anche il primo scoglio sul nostro cammino di Script-Fu . Si tratta di un elemento lungo elenco e non come  un valore intero! Pertanto, per utilizzare il valore, dobbiamo ottenere il primo elemento dell’elenco con auto, verrà restituito il immagine con ID 3.

È possibile che ora mi domando, dove l’immagine è che abbiamo creato, in quanto non è possibile vedere. La risposta è: non si dispone di un display, in modo che l’immagine è solo all’interno della memoria, ma non viene visualizzato, quindi dobbiamo creare un display. Cerchiamo (gimp-display-nuovo 3) , masi ottiene un errore:

ERRORE: database procedurale esecuzione non riuscita:

Gimp_display_new (3)

Così, si tratta semplicemente di un altro scoglio. Non tutte le funzioni in Script-Fu , atto lo stesso come le loro controparti nei menu. A volte sono molto di più basso livello, quindi è necessario lavorare ancora, per ottenere i risultati che ci si aspetta. Il problema qui è che la nostra nuova immagine non contiene strati. Per visualizzare un’immagine, abbiamo bisogno di almeno uno strato. Il prossimo passo è quello di creare un livello:

=> (Gimp-layer-new 3 256 256 RGB-IMMAGINE “foobar” 100 NORMALE-MODE)

 

(21)

Si noti che le costanti RGB-IMMAGINE e MODALITÀ NORMALE è elencato come RGB_IMAGE e nell’NORMAL_MODE DB Browser ( l’underscore “_” ).  È necessario sostituire tutte le underscrores con meno ‘ -‘ nella Script-Fu mondo. Se non si è sicuri che le sostituzioni sono giusti, basta inserire la costante nella console.

Il passo successivo è quello di aggiungere il nuovo strato di immagine, come descritto nel DB browser:

=> (Gimp-image-add-strato 3 21 -1)

 

()

E ora finalmente è possibile visualizzare la nostra immagine:

=> (Gimp-display-nuovo 3)

 

(4)

L’immagine visualizzata sembra un po’ strana, perché è riempita con colori casuali, di cancellare, riempire il livello con il colore di sfondo corrente.

=> (Gimp-disegno-riempire 21 BG-IMAGE-FILL)

 

()

La funzione di riempire uno strato è gimp -disegno-riempire e non gimp-layer-riempire come ci si potrebbe aspettare che un livello è un disegno. Quindi, se siete alla ricerca di funzioni per manipolare gli strati, si dovrebbe anche cercare per roba che manipola drawables.

Ora abbiamo la nostra immagine. Per un rapido per voi? Consente quindi sintetizzare e scrivere il nostro primo programma. Prima abbiamo encapsule tutti in un lasciar * clausola e di aggiungere la clausola * corpo della funzione:

(Definire (my-rendere-nuovo-immagine)

(LET * ((immagine (car (gimp-image-nuovo 256 256 RGB)))

(Strato (car (gimp-layer-nuova immagine 256 256

RGB-IMMAGINE “foobar” 100 MODALITÀ NORMALE))))

(Gimp-disegno-strato di riempimento BG-IMAGE-FILL)

(Gimp-image-add-strato strato di immagine 0)

(Gimp-display-nuova immagine)

Immagine))

L’ultima riga di un regime funzione è il valore di ritorno, in modo tale immagine è il valore di ritorno della funzione.

Torniamo alla metallo-testo, dobbiamo ora aggiungere una stringa di testo e giocare con esso. Un po’ la navigazione nel DB porta fino gimp-testo-fontname. Per questo abbiamo tipo:

=> (Gimp-testo-fontname 3 21 -1 0, “Foobar” 0 VERO 25 PIXEL

“-FREEFONT-BLIPPO-HEAVY-R-NORMAL- * -24- * – * – * -P- * -iso8859-1 “)

 

(33)

E voilà, abbiamo il nostro testo su un nuovo livello. La stringa “-FREEFONT-BLIPPO-HEAVY-R-NORMAL- * -24- * – * – * -P- * -iso8859-1” potrebbe essere come black-magic, ma vedremo in seguito un modo semplice per creare.

Ora abbiamo bisogno di duplicare il livello, si può notare che non vi sia un duplice funzione di strato nel DB, quindi bisogna farlo manualmente e scrivere un altro schema:

(Definire (my-doppio-strato strato di immagine)

(LET * ((dup-strato (car (gimp-layer-copia strato 1))))

(Gimp-image-add-immagine livello dup-layer 0)

DUP-strato))

E poi:

=> (My-doppio-strato 3 34)

 

41

Il passo successivo è quello di aggiungere un po’ di spazio per il testo ingrandito, gimp-layer-ridimensionare il nostro amico:

(Gimp-layer-ridimensionare 41 200 100 5 5)

Questo funziona, ma la larghezza e l’altezza sono codificati, in modo da riprovare in modo più flessibile:

(Definire (my-strato-add-strato del bordo)

(LET * ((larghezza (car (gimp-disegno-larghezza strato)))

(Altezza (car (gimp-layer disegnabili altezza))))

(Gimp-layer-ridimensionare strato

(Confine + larghezza + altezza) (confine)

(/ Confine 2) (/bordo 2))))

Ora abbiamo bisogno di trasferire gli strati alfa piastrino per la selezione e alcuni pixel:

(Gimp-selezione-strato-alfa 41)

(Gimp-selezione-crescere 3 5)

Prima di riempire lo strato, dobbiamo rimuovere il “Keep trans” bandiera, che fa sì che tutte le zone trasparenti soggiorno trasparente:

(Gimp-layer-set-conservare-trans 41 0)

Ora, è possibile riempire la selezione con il gradiente:

(Gimp-blend 41 CUSTOM NORMALE LINEARE 100 0 RIPETERE-NESSUNO FALSO da 0 0 0 0 30 50)

Iscritto il Script-Fu

Eh, ora abbiamo tutto per il nostro script-fu pronto, abbiamo solo bisogno di fissare i pezzi. Di seguito verranno rimossi anche alcune azioni non necessarie e probabilmente aggiungere alcune cose.

Ok, così come scrivere un Script-Fu ? Beh, devi fondamentalmente tre cose. Prima di tutto, un file in cui lo script è scritto, che il file deve essere collocato in~ / .gimp-1.1/scripts/. In secondo luogo, una funzione, che non tutti la manipolazione dell’immagine, e infine è necessario avere una chiamata di script-fu-register per rendere il vostro script visibile dall’interno del Gimp.

Quindi scrivere una funzione vuota e registrarlo. È consigliabile copiare&incollare il seguente codice in un file dummy .scm e salvare il file in ~ / .gimp-1.1/scripts/come sopra descritto.

(Definire (my-dummy-funzione a-b)

(Stampa “niente”)

 

(Script-fu-register “my-dummy-funzione”

_”<Toolbox>/Xtns/ Script-Fu /My Stuff/Dummy…”

“Non fare nulla”

“Joey”

“Joey”

“Agosto 2000”

“”

SF-REGOLAZIONE _ “Larghezza” (400 1 2000 1 10 0 1)

SF-REGOLAZIONE _”altezza” (30 1 2000 1 10 0 1))

Quando si preme Xtns- >Scritp-fu- >ricaricare lo script viene caricato in Gimp e dovrebbe essere accessibile dal menu.

Notare, vi sono due tipi di Script-Fu ‘s.  Il primo tipo consente di creare una nuova immagine, e questo è usato per il logo e accessibili attraverso il menu Xtns->Scritp-fu->…,e il secondo tipo, manipolare un’immagine esistente, questo tipo è accessibile attraverso il pulsante destro del mouse su menu a comparsa su un’immagine Scritp-fu->…. Per registrare il secondo tipo di Script-Fu , è necessario regolare il percorso <Image>/ Script-Fu / … E occorre prendere i primi due argomenti di tipo SF-IMMAGINE e SF-DISEGNABILE.

Questo ci porta al prossimo argomento, agli argomenti che la tua funzione può ottenere, si possono ottenere i seguenti tipi:

Tipo di argomento Tipo di dati Descrizione
SF-IMMAGINE Numero intero (id immagine) Utilizzato per ottenere un’immagine id
SF-IMBUTITURA Numero intero (disegnabile id) Ottenere un disegno id
SF-VALORE Stringa Immettere un valore numerico
SF-PASSARE Boolean (TRUE o FALSE) Ingresso a booleon valore
SF-PATTERN Stringa (nome modello) Consente di selezionare un pattern
SF-REGOLAZIONE Elenco (avvio-valore valore minimo valore massimo piccolo-grande passo-passo [int=0 o galleggiante= 1] [cursore=0 o roll box= 1]) Crea una barra di scorrimento o una casella di input con valori di intervallo
SF-FILENAME Stringa (pathname) Consente di selezionare il file
SF-STRINGA Stringa Crea una casella di immissione
SF-FONT Stringa (fontname) Consente di selezionare un font
SF-COLORE Elenco (rosso verde blu) [ 0-255] Consente di selezionare un colore
SF-OPZIONE Elenco di stringhe Consente di selezionare un elemento da un elenco
SF-GRADIENTE Stringa (gradiente) Consente di selezionare un gradiente

Il codice seguente crea una finestra con tutti i possibili tipi di ingresso:

(Definire (my-demo-casella valore adj1 adj2 immagine disegnabile passare stringa pattern font color opzione gradiente)

(Stampa “niente”)

 

(Script-fu-register “my-demo-box”

“<Toolbox>/Xtns/ Script-Fu /la mia roba/Demo Box…”

“Non fare nulla”

“Joe”

“Joe”

“Agosto 2000”

“”

SF-REGOLAZIONE “SF-REGOLAZIONE (cursore)” “( 30 1 2000 1 10 1 0)

SF-REGOLAZIONE “SF-REGOLAZIONE” (400 1 2000 1 10 1 1)

SF-COLORE “SF-COLORI” ” (255 0 255)

SF-DISEGNABILE “SF-DISEGNABILE” 0

SF-FONT “SF-FONT” “”

SF-GRADIENTE “SF-GRADIENT” “dorata”

SF-IMMAGINE “SF-IMMAGINE” 0

SF-OPZIONE “SF-OPZIONE” ( “Opzione 1” “Opzione 2” “Option 3 “)

SF-MODELLO “SF-PATTERN” “legno”

SF-STRINGA “SF-STRING”, “Stringa di prova”

SF-PASSARE “SF-PASSARE” VERO

SF-VALORE “SF-VALORE” ” 0″

SF-FILENAME “SF-FILENAME” ” / “)

La finestra risultante avrà un aspetto simile a questo:

Per tornare al lavoro, di finire il nostro Script-Fu esempio. Dobbiamo iniziare con il lavoro di cornice, così abbiamo bisogno di decidere quali tipi di argomento abbiamo bisogno. Come vogliamo creare un font, dobbiamo in primo luogo il testo, in modo da utilizzare SF-STRINGA, che dobbiamo utilizzare SF-FONT per la selezione del carattere e inoltre SF-VALORE per inserire la dimensione del carattere.

La creazione dello script -fu-register è lasciato come esercizio per l’utente. Se non volete provare da soli è possibile individuare alcune linee di sotto per il termine dello script. La finestra risultante potrebbe essere simile a questo:

Ora che abbiamo la nostra chiamata registro, possiamo riempire la funzione con il codice. Prima di inserire le due funzioni di supporto: il mio duplicato-strato estrato-add-confine, all’inizio del file. Successivamente, abbiamo più o meno copia&incolla il nostro Console Script-Fu esperimenti insieme. Dobbiamo spostare il gimp-display-nuova chiamata alla fine della nostra funzione, quindi non possiamo vedere come il rendering dell’immagine. Dobbiamo anche aggiungere un’altra funzione di supporto, che riducono l’immagine finale della giusta dimensione. Lo script risultante potrebbe essere quindi qualcosa di simile a questo:

(Definire (my-image-strato-dimensioni immagine strato)

(Gimp-layer-set-strato offset o 0)

(Gimp-image-ridimensionare immagine

(Car (gimp-disegno-larghezza strato))

(Car (gimp-disegno-altezza strato))

0 0))

 

(Definire (my-strato-add-strato del bordo)

(LET * ((larghezza (car (gimp-disegno-larghezza strato)))

(Altezza (car (gimp-layer disegnabili altezza))))

(Gimp-layer-ridimensionare strato

(Confine + larghezza + altezza) (confine)

(/ Confine 2) (/bordo 2))))

 

(Definire (my-doppio-strato strato di immagine)

(LET * ((dup-strato (car (gimp-layer-copia strato 1))))

(Gimp-image-add-immagine livello dup-layer 0)

DUP-strato))

 

(Definire (my-rendere-metal-testo con font font font-size)

(LET * ((immagine (car (gimp-image-nuovo 256 256 RGB)))

(Fondo-font-strato (car (gimp-testo-immagine del carattere da -1 0 0 testo 0 VERO font-size PIXEL

Font))))

 

(LET * ((top-font-strato (my-doppio-strato inferiore dell’immagine-font-strato)))

 

(My-strato-add-bordo inferiore-font-strato 20)

 

(Gimp-layer-set-conservare-trans fondo-font-layer 0)

(Gimp-gradienti-set-attivo “Four_bars”)

 

(Gimp-selezione-strato inferiore-alfa-font-strato)

(Gimp-selezione-crescere immagine 3)

(Gimp-blend fondo-font-strato NORMALE PERSONALIZZATO LINEARE 100 0 RIPETERE-NESSUNA FALSA 0 0 0 0 200 50)

 

 

(Gimp-selezione-strato-alfa top-font-strato)

(Gimp-blend top-font-strato NORMALE PERSONALIZZATO LINEARE 100 0 RIPETERE-NESSUNA FALSA 0 0 0 50 200 0)

(Gimp-selezione-immagine chiara)

 

(LET * ((nuovo strato (car (gimp-image-unisci-visibile-strati

INGRANDIMENTO immagine-COME-NECESSARIO))))

(My-image-strato-dimensioni immagine nuova-strato))

 

(Gimp-display-nuova immagine))

))

 

(Script-fu-register “my-rendere-metal-font”

“<Toolbox>/Xtns/ Script-Fu /Loghi/metallo Font…”

“Creare un’immagine di esempio di una sfumatura personalizzata”

“Federico Mena Quintero”

“Federico Mena Quintero”

“Giugno 1997”

“”

SF-STRINGA “Testo” “The GIMP”

SF-FONT “Font” “- * -BLIPPO- * -R- * – * -24- * – * – * -P- * – * – * ”

SF-VALORE “Font Size” ” 50″ )

Problemi comuni

Di seguito è riportato un elenco di problemi comuni in Script-Fu .

I valori di ritorno

Quando una funzione restituisce un valore, sarà sempre incapsulato in un elenco; non importa se solo un valore o più valori. Anche se il valore restituito è una lista, come per esempio il colore restituito da gimp-color-picker, il valore restituito sarà sempre incapsulato in un ulteriore elenco.

Se vengono restituiti i valori multipli sono inoltre in un elenco, il primo valore restituito è il primo elemento della lista, il secondo è il secondo elemento dell’elenco, ecc. Pertanto è necessario applicare sempre una macchina  chiamata per ottenere il valore corretto.

R5SR Il Rispetto

R5SR È il documento che descrive il sistema lingua, ma purtroppo la lingua utilizzata in Gimp non è la R5SR; non proprio. Ecco perché Gimp utilizza SIOD come interprete scheme. SIOD è un piccolo attuazione del programma, il prezzo è che offre solo un piccolo sottoinsieme di R5SR funzioni; anche alcune delle funzioni” i nomi sono stati cambiati. Per esempio non hanno solo una funzione chiamata stampa .Per una sintesi del regime funzioni supportate da Gimp, potete dare un’occhiata alla pagina web di SIOD. A rendere ancora più grave il Gimp non offrono tutte le funzioni elencate nella pagina SIOD, ma è un buon punto di partenza. È inoltre possibile utilizzare la funzione apropos nella console per la ricerca di una funzione specifica:

=> (Apropos “scrittura”)

 

Fwrite scrive da scrittura (write-maschera corsa-sovrascrivere)

Il debug

Quando si comincia a giocare con Script-Fu , e anche quando si ha familiarità con essa, molto spesso in una situazione in cui lo script non funziona. A rendere ancora peggiore, a volte non sarà possibile anche ricevere un messaggio di errore. La maggior parte del tempo, la causa sarà semplice, ma la ricerca. La seguente procedura potrebbe facilitare la ricerca.

Prima di verificare che lo script sia sintatticamente corretta; ciò significa che avete chiuso tutti aperti tra parentesi e virgolette. Un editor con evidenziazione della sintassi, rientro automatico e parentesi mettendo a realizzare.

Secondo, si potrebbe aver dimenticato di aggiungere un auto per un valore. Per verificare la disponibilità di questi errori, copia&incolla il codice nella Console Script-Fu e manualmente.

ERRORE: Invalid tipi specificati per argomenti

Quanto sopra è molto probabile che il messaggio di errore, se si ottiene un altro messaggio di errore, il bug potrebbe essere altrove.

Quando si chiama una funzione con troppo poche o molte argomentazioni, verrà visualizzato il seguente messaggio di errore:

=> (Gimp-image-get-strati)

ERRORE: troppi argomenti (vedi errobj)

Non basta dare un’occhiata al errobj: vi dirà quali argomenti sono stati previsti e forniti.

=> (Stampa errobj)

 

((Immagine))

()

Finalmente se la funzione ancora non funziona, aggiungere alcune  chiamate a stampa nei posti giusti per controllare che tutto funzioni correttamente. Per visualizzare l’output di stampa è necessario eseguire il Script-Fu nella console.

Cosa non si può fare in Script-Fu

Per ora ho descritto che cosa si può fare con Script-Fu , ma ci sono anche un sacco di cose che non si può fare in Script-Fu .

La prima cosa che si potrebbe fare è quello di fornire alcuni meglio i valori di default per l’argomento che la funzione riceve. La cattiva notizia è che non è possibile, si può passare solo valori costanti al Script-Fu registro chiamate. Quindi, se il valore predefinito deve essere, per esempio, metà della larghezza dell’immagine, non è possibile farlo, per vivere con un valore costante.

Un’altra cosa che si potrebbe desiderare di avere è una sorta di GUI che va dietro il roba che è fornito dal SF- * valori; e ancora: non è possibile farlo. Il SF- * i valori sono tutte le gui che vi aspettate da Script-Fu . Se si desidera più complesse, come una finestra di anteprima, è necessario scrivere un vero Gimp Plug-in.

A un certo punto è possibile scrivere il proprio filtro o effetto, che richiede manipolazione delle immagini a livello di pixel. Questa è una cosa che si può realmente in Script-Fu . Ma sarà estremamente lento, a causa della natura interpretata di Script-Fu . Ancora una volta, quindi, è meglio scrivere che come un vero Gimp Plug-in.

È inoltre possibile aprire una directory e aprire tutte le immagini. Neppure questo è possibile. La pagina web SIOD opendir descrive la funzione, ma quando la si prova in Script-Fu e non funziona come molti altri SIOD funzione.

=> (Opendir ” / “)

 

ERRORE: nessun impegno specifico variabile (errobj opendir)

Per risolvere questo problema devi lavorare intorno a questo dal dumping il contenuto della directory di un file e leggere questo file al posto, o è possibile scrivere un Perl-Fu , Python-Fu o Gimp Plug-in.

Esiste un progetto chiamato gimple in Gnome CVS repositiory che potrebbe risolvere alcuni di questi problemi. È un inganno Gimple interfaccia per Gimp. Sarà molto meglio R5SR il rispetto di SIOD e sarà probabilmente in grado di chiamare guile-gtk, per consentire la creazione di molto più flessibile dell’interfaccia gui, le interfacce, ma non so lo stato di questo progetto e non ho mai visto in azione.

Esempi

È sempre una buona idea per dare un’occhiata al Script-Fu stranieri a imparare. Script-Fu può essere trovata, ad esempio in Gimp directory/usr/share/gimp/1,1 /scripts/. Ci sono anche alcuni links ad altri siti Script-Fu alla Gimp pagina web. Ho anche caricato il mio Script-Fu ‘s, è possibile trovare loro here, ma attenzione, la maggior parte di loro non sono documentate, e alcuni potrebbero non funzionare.

Riferimenti