Tecnologia e non solo

maggio 11, 2012

Gimp 2.8 scripting con script-fu 15

Archiviato in: image-processing — telperion @ 5:31 pm

Quindicesima parte.
Le operazioni batch.
if, while, and, not, equal?, let* nidificati, liste di file, operazioni sulla stringhe.

Con gimp e il linguaggio scheme possiamo fare eseguire a gimp, compiti seriali su gruppi di immagini in modo molto simile agli script da eseguire all’interno dell’interfaccia.

Le nozioni base le trovate qui:
gimp.org/tutorials/Basic_Batch/

Un esempio di script batch per convertire le immagini contenute in una cartella:



; eseguire nella cartella con le immagini da trattare:
;
; gimp -i -b '(batch-format-convert "*.jpg" ".png")' -b '(gimp-quit 0)'
; 
; input:  *.jpg *.gif *.tiff *.png *.xcf
; output: .jpg .gif .tiff .png 
;


(define (batch-format-convert pattern-in format-out)

  (let* 
	(
		(filelist (cadr (file-glob pattern-in 1)))
		(fmt-out format-out)
	)
    
	(while 
		(not (null? filelist))

           	(let* 
			(
				(filename (car filelist))
                  		(image (car (gimp-file-load RUN-NONINTERACTIVE filename filename)))
                  		(drawable (car (gimp-image-flatten image)))
			)
				
			(if (and (equal? fmt-out ".gif") 
				 (not (= (car(gimp-drawable-type drawable)) INDEXED-IMAGE) )
			    )
				(gimp-convert-indexed image FS-DITHER MAKE-PALETTE 256 FALSE TRUE "aaa")
			)
		

			(if (and (equal? fmt-out ".jpg") 
				 (not (= (car(gimp-drawable-type drawable)) RGB-IMAGE) )
			    )
				(gimp-convert-rgb image)
			)

			(set! filename 
				(string-append 
					(substring filename 0 
						(- (string-length filename) 
						   (- (string-length pattern-in) 1) 
						)
					) 
					"_out"
					fmt-out
				)
			)

             		(gimp-file-save RUN-NONINTERACTIVE image drawable filename filename)

             		(gimp-image-delete image)

		)

  		(set! filelist (cdr filelist))
	)

   )

)


Qui la versione da salvare:
pastebin.com/raw.php?i=kTZ4G7Az

che salverete come
batch-format-convert.scm
nella consueta cartella
~/.gimp-2.8/scripts

Lo script tratta tutti i file nella cartella con il pattern-in specificato
ad esempio "*.jpg"
e li salva con il suffisso format-out specificato
ad esempio ".png"

Viene anche fatto un controllo tra il formato di uscita ed il tipo di immagine,
indicizzata o rgb, e se necessario viene convertita nel formato corretto.

Per usarlo aprite un terminale nella cartella contenete le immagini, ed eseguite:

gimp -i -b '(batch-format-convert "*.jpg" ".png")' -b '(gimp-quit 0)'


Uploaded with ImageShack.us

Tutte le immagini *.jpg verranno convertite in .png, non verranno sovrascritte mai, perchè viene sempre aggiunto _out al nome in ingresso.

Ovviamente come per gli script, possiamo aggiungere al fondo tutte le nostre funzioni personali, ed utilizzare nel batch per compiere le operazioni più disparate sulle nostre immagini.

Ad esempio in batch-format-convert-scale.scm
pastebin.com/raw.php?i=JXwTsRFJ

ho aggiunto al fondo la funzioni personale
(scala-proporzione img dimensionemax)

e quindi ora con un

gimp -i -b '(batch-format-convert-scale "*.jpg" ".png" 800)' -b '(gimp-quit 0)'

nella cartella delle immagini, tutte le jpg saranno riscalate proporzionalmente a 800px e convertite in png,

Oppure un

gimp -i -b '(batch-format-convert-scale "*.jpg" ".jpg" 1000)' -b '(gimp-quit 0)'

tutte le jpg saranno riscalate proporzionalmente a 1000px e salvate in jpg.

E questa è solo la punta dell’iceberg.

Alla prossima.

L’indice completo delle parti di “Gimp-2-8 scripting con script-fu”
lo trovate in
Articoli in evidenza

About these ads

The Rubric Theme. Blog su WordPress.com.

Iscriviti

Ricevi al tuo indirizzo email tutti i nuovi post del sito.

Unisciti agli altri 31 follower

%d blogger cliccano Mi Piace per questo: