15 Jul 2011
batch rotate and image processing in GIMP
Wednesday Jun 15, 2011
The GIMP Script-Fu scheme snippet will take a file wildcard pattern ("*.JPG") and an rotate-type value (0 = 90° / 1 = 180° / 2 = 270°), level out the colors in the picture and save the changed image as a PNG file.
(define (batch-rotate pattern rotate-type) (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)))) (set! filename (strbreakup filename ".")) (set! filename (butlast filename)) (set! filename (string-append (unbreakupstr filename ".") ".png")) (gimp-image-rotate image rotate-type) (gimp-levels-stretch drawable) (gimp-file-save RUN-NONINTERACTIVE image drawable filename filename) (gimp-image-delete image)) (set! filelist (cdr filelist)))))
The scheme function above can be stored into the users GIMP scripting
directory (~/.gimp-2.6/scripts/
) as "rotate-and-level.scm
".
The shell script below can be used to start the batch rotate process on a directory of JPEG pictures.
#!/bin/sh # file rotate.sh gimp -i -b "(batch-rotate \"${1}\" ${2})" -b '(gimp-quit 0)'
On a Unix shell, the glob file pattern needs to be quoted so that the shell will not expand it:
# ./rotate.sh "*.JPG" 0