Attenzione: l'articolo è stato scritto da oltre 1 anno, le informazioni in esso contenute potrebbero essere datate e non più attuali.

Script-fu con GIMP (COMPLETARE)

Nelle ultime settimane una domanda mi ha martellato il cervello: "Perché devo fare io quello che può fare Gimp automaticamente?".

Allora sono partito alla ricerca di informazioni sulle così tanto blasonate "enormi capacità" di Gimp nel campo dell'automatizzazione delle operazioni, il famigerato scripting. Lo scripting di Gimp può essere fatto ricorrendo a numerosi linguaggi di programmazione: Script-fu, Perl, Java, Python, TCL e forse altri (anche se alcuni progetti sembrano morti). Io vi presenterò Script-fu in quanto è quello predefinito, non necessita di pacchetti aggiuntivi per il suo funzionamento, può essere usato sia su Win che Linux (a differenza del Perl), e inoltre mi sembra abbastanza facile, molti lamentano il fatto che non sia molto potente e flessibile ma per iniziare può bastare. Chi comunque già conosce altri linguaggi di programmazione, in particolare il Perl o il Python, può rivolgersi ad essi, non credo incontrerà acuna difficoltà. Gran parte delle cose che vi dirò sono già state scritte, in particolare mi baserò sui seguenti documenti:

Se conoscete l'inglese (una conoscenza di base è necessaria per la scrittura degli script) leggete direttamente quelli.
Un'ultima nota: dato che fino a ieri non conoscevo niente di scripting, potrei dirvi delle piccole inesattezze quindi state con gli occhi aperti ;)

Iniziamo

Come detto baserò queste mie lezioni sullo Script-fu, un linguaggio di programmazione basato su SIOD (scheme in one defun), una versione ridotta del linguaggio Scheme. La sintassi di questo linguaggio è simile a quella del LISP e presenta le seguenti caratteristche: tutte le espressioni sono racchiuse tra parentesi e all'interno di esse il primo termine è la funzione e gli altri termini sono parametri. Per chiarirmi meglio vediamo alcuni esempi:

  • (funzione parametro1 parametro2). Questa è il protitipo di una espressione scritta in linguaggio Script-fu: una funzione che accoglie due parametri
  • (crea_gradiente bianco nero). In questo caso potremmo trovarci davanti una funzione, crea_gradiente, che crea appunto un gradiente tra i due colori bianco e nero
  • (+ 4 5). Anche in questo caso ci troviamo davanti ad una espressione, la funzione è la somma e i parametri sono i numeri

Finora abbiamo visto alcuni casi di utilizzo di funzioni se però non abbiamo la funzione possiamo sempre crearla:

(define (nome_funzione parametro1 parametro2) (funzione ...) )

Ad esempio per calcolare il quadrato di un numero possiamo prima creare la funzione:

(define (quadrato x) (* x x ) )

e poi richiamare la funzione:

(quadrato 10)

Finora ho elencato una serie di comandi e qualcuno si starà chiedendo come verificare che siano corretti ;) E' una giusta domanda cui darò ora una risposta: aprite Gimp e lanciate la Console Script-Fu (Xtns -> Script-Fu -> Console...):

console script-fu gimp

Incominciate ad inserire i comandi visti sopra nella casella in basso "Comando corrente" per impratichirvi un po' con la sintassi di Scheme, ad esempio provate ad eseguire le varie operazioni.

I più audaci possono anche premere il pulsante "Naviga". Si aprirà il DB explorer con tutte le funzioni presenti in GIMP e la descrizione dei parametri accettati e emessi:

script-fu db explorer

Variabili e liste (car cdr)

Struttura di uno script

Template xtns e image.

Esempio commentato

Quello che segue è uno script fu che ripercorre le stesse operazioni viste per il tutorial sul testo Beveled. Ogni parte rilevante è stata ben commentata, quindi credo non abbiate problemi a seguirlo:

; Beveled -- Effetto lieve per GIMP 2.0
; Questo script automatizza il procedimento che illustro
; su http://www.volalibero.it/beveled1.html
; non sono sicuro che sia scritto in maniera corretta e nel modo più efficace,
; ma funziona e allora... :-)
; P.S. e' il mio primo script!!! " Ciao MONDO!!!"

; Funzione principale

(define (script-fu-beveled-volalibero testo dimensione carattere colore colore2 appiattisci)

; creiamo una nuova immagine e un livello di tipo testo (set! immagine (car (gimp-image-new 256 256 RGB ) ) )
(set! text-layer (car (gimp-text-fontname immagine -1 0 0 testo 10 1 dimensione 0 carattere ) ) )

;disabilito la possibilità di annullare le operazioni per risparmiare memoria
(gimp-image-undo-disable immagine)

; chiamo il livello text-layer, creato prima, Testo
(gimp-drawable-set-name text-layer "Testo")

; imposto il colore di primo piano al colore scelto dall'utente
(gimp-palette-set-foreground colore)

; imposta il colore di sfondo a quello scelto dall'utente
(gimp-palette-set-background colore2)

; proteggo la trasparenza del livello testo
(gimp-layer-set-preserve-trans text-layer TRUE)

; riempio il livello text-layer con il gradiente shapeburst dei
; colori scelti dall'utente. Verrà riempito solo il testo perché prima
; è stata attivata la protezione della trasparenza
(gimp-edit-blend text-layer 0 0 6 100 0 0 FALSE FALSE 1 1 1 0 0 40 40)

; misuro la larghezza e l'altezza del livello testo
(set! width (car (gimp-drawable-width text-layer)))
(set! height (car (gimp-drawable-height text-layer)))

; ridimensiono l'immagine a quella del livello
(gimp-image-resize immagine width height 0 0)

; creo un nuovo livello chiamato Sfondo con la stessa larghezza e altezza
; del livello testo che ho misusrato due funzioni fa.
(set! sfondo (car (gimp-layer-new immagine width height 0 "Sfondo" 100 0)))

; aggiungo il livello sfondo all'immagine
(gimp-image-add-layer immagine sfondo 0)

;seleziono tutta l'immagine e la riempio con il colore bianco
(gimp-selection-all immagine)
(gimp-edit-fill sfondo 2)

; rimuovo la selezione
(gimp-selection-none immagine)

; abbasso il livello sfondo sotto a quello testo
(gimp-image-lower-layer immagine sfondo)

; appiattisci immagine e salva per il web in png (64 colori senza dithering)
(if (= appiattisci TRUE) (gimp-image-flatten immagine) () )

; disegno l'immagine e riabilito la possibilità di annullare le operazioni fatte
(gimp-display-new immagine)
(gimp-image-undo-enable immagine)
)

; --------------------------------------
; Funzione di registrazione
; --------------------------------------
(script-fu-register "script-fu-beveled-volalibero"
_"<Toolbox>/Xtns/Script-Fu/Logos/Volalibero/Bevel (Effetto lieve)"
"Crea un semplice effetto tridimensionale. Maggiori info su http://www.volalibero.it/beveled1.html"
"Mike Vargas"
"Mike Vargas, http://www.volalibero.it/contatti.html"
"2003"
""
SF-STRING "Te_sto" "Bevel"
SF-ADJUSTMENT "_Dimensione (pixels)" '(60 2 1000 1 10 0 1)
SF-FONT "Cara_ttere" "Ikarus Vulture Italic"
SF-COLOR "Color_e carattere" '(255 0 0)
SF-COLOR "Co_lore secondario" '(74 0 0)
SF-TOGGLE "A_ppiattisci?" FALSE
)



















































































Debugging

Il tuo voto: Nessuno Media: 4 (1 vote)

Commenti

ho letto la guida sugli

ho letto la guida sugli script fu e l' ho trovata molto utile per capire la linea da seguire per comminciare a far in modo che gimp lavori per te!
solo che non ho capito come si fa a fare "eseguire" lo script a Gimp, quando digito il testo nella console e dopo premo invio non succede apparentemente nulla!
comunque ci lavorero' su!