Operazioni batch con Gimp

Probabilmente quando in Linux è necessario compiere operazioni batch su molte immagini quasi tutti si affidano all’ottimo ImageMagick, però pochi sono a conoscenza del fatto che anche Gimp offre la possibilità di eseguire  comandi batch.

Street Wings

In particolare è possibile eseguire Gimp senza interfaccia grafica tramite l’opzione -i, ed è possibile eseguire singoli comandi o sequenze di comandi tramite l’opzione -b:

gimp -i -b ‘(comando parametri)’ -b ‘(gimp-quit 0)’

Questa funzionalità è molto comoda ad esempio se si vuole eseguire uno script-fu su un grosso numero di file.

Tuttavia gli script-fu devono essere predisposti per lavorare su più file. Ad esempio di seguito riporto una versione “batch” dello script-fu per la maschera di contrasto riportata in un mio precedente post.

(define (maschera-di-contrasto-batch pattern)
(let* ((filelist (cadr (file-glob pattern 1))))
(while (not (null? filelist))
(let* ((filename (car filelist))
(image (car (gimp-file-load RUN-NONINTERACTIVE
filename filename)))
(drawable (car (gimp-image-get-active-layer image))))
(gimp-levels-stretch drawable)
(set! drawable (car (gimp-layer-copy drawable 100)))
(gimp-layer-set-mode drawable OVERLAY)
(gimp-image-add-layer image drawable -1)
(gimp-invert drawable)
(gimp-desaturate-full drawable 2)
(plug-in-gauss 1 image drawable 25 25 0)
(gimp-image-flatten image)
(set! drawable (car (gimp-image-get-active-layer image)))
(gimp-file-save RUN-NONINTERACTIVE
image drawable filename filename)
(gimp-image-delete image))
(set! filelist (cdr filelist)))))

Quali sono le modifiche principali rispetto alla versione base dello script?

  1. come parametro di ingresso questo script si aspetta un pattern. Ad es: *.jpg
  2. con il comando flie-glob ottengo la lista dei file che soddisfano il pattern all’interno della cartella corrente
  3. ciclo (con il comando while) sulla lista dei file:
    1. notare il comando car per estrarre la testa della lista (il primo file)
    2. e il comando cdr (in fondo) per aggiornare la lista eliminando il file appena processato
  4. opzioni RUN-NONINTERACTIVE per i comandi gimp-file-load e gimp-file-save, per bloccare le interazioni con l’utente.
  5. manca la parte di registrazione dello script e posizionamento nel menù, proprio perchè è pensato per essere eseguito come batch, senza interfaccia grafica.

Quindi come posso eseguire questo script su tutte le immagini Jpeg presenti nella directory corrente? Semplice:

gimp -i –verbose -b ‘(maschera-di-contrasto-batch “*.JPG”)’ -b ‘(gimp-quit 0)’

Un pensiero su “Operazioni batch con Gimp”

Lascia un commento

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione / Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione / Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione / Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione / Modifica )

Connessione a %s...