; eseguire nella cartella con le immagini da trattare: ; ; gimp -i -b '(batch-format-convert-scale "*.jpg" ".png" 800)' -b '(gimp-quit 0)' ; ; input: *.jpg *.gif *.tiff *.png *.xcf ; output: .jpg .gif .tiff .png ; (define (batch-format-convert-scale pattern-in format-out dimensionemax) (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))) ) (scala-proporzione image dimensionemax) (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)) ) ) ) ; -------------------------------------------------------------------- ; funzioni personali ; -------------------------------------------------------------------- ; -------------------------------------------------------------------- ; (scala-proporzione img dimensionemax) ; ; la funzione scala l'immagine proporzionalmente ; al valore dimensionemax (numero di pixel) per il lato più lungo (define (scala-proporzione img dimensione) (let* ( ; dichiarare tutte qui le variabili usate ; queste variabili sono usate nella funzione ; (dimensione) -> non serve più perchè già dichiarata sopra nel define ; le variabili locali seguenti sono tutte inizializzate a zero ; altrimenti gimp si lamenta (fattore 0) (largh_finale 0) (alt_finale 0) (larghezza 0) (altezza 0) ; fine variabili ) ; qui ci saranno tutte le operazioni da compiere ; mettiamo nella variabile larghezza l'attuale larghezza dell'immagine (set! larghezza (car (gimp-image-width img) ) ) ; mettiamo nella variabile altezza l'attuale altezza dell'immagine (set! altezza (car (gimp-image-height img) ) ) ; ciclo if per determinare il fattore di aspetto ; e calcolo dello stesso (if (< altezza larghezza) (set! fattore (/ larghezza dimensione) ) (set! fattore (/ altezza dimensione) ) ) ; calcolo di largh_finale e alt_finale immagazzinata ; nelle rispettive variabili (set! largh_finale (/ larghezza fattore) ) (set! alt_finale (/ altezza fattore) ) ; infine scaliamo l'immagine alle nuove dimensioni (gimp-image-scale img largh_finale alt_finale) ; fine operazioni ) ) ; --------------------------------------------------------------------