From GIMP Developer Wiki
Batch Processing
(define (do-it-real file-names-list)
; If you have any preprocessing to do, that is needed for all the images, do
; it here. For example, if the image is an ordered list of movie frames, you
; may want to define a counter starting at 0 here, and then access it later
...
; Now, run through the list of images
(map
; For each file name, do the following
(lambda (file-name)
(let* (
; Load the image, and retrieve it's ID into this variable
(image (car (gimp-file-load RUN-NONINTERACTIVE file-name file-name)))
; In many cases, we want the ID of the top layer (especially in
; images which have one layer; in these cases that layer has the
; actual image data.
(layer (vector-ref (cadr (gimp-image-get-layers image)) 0))
; Get the name of the image (without the folder path, just the
; name of the image file). Useful if you want to save the image at
; a different folder or with a slightly modified name.
(image-name (car (gimp-image-get-name image)))
)
; Do some stuff to the image
...
; Save the image using the default saving method. We pass the same
; file name to override the source.
(gimp-file-save RUN-NONINTERACTIVE image layer file-name file-name)
; Important - Close the image! Don'e just waste memory on hidden
; images. Also the idea is to work on one image at a time.
(gimp-image-delete image)
)
)
file-names-list
)
)
; This procedure takes a pattern describing the names of the images to be
; processed. Examples:
;
; "/home/lightning/Desktop/hello*.png"
; All files on my Desktop folder, which are of png type and their name
; begin with the world hello
;
; "/home/lightning/Pictures/*"
; All files inside my pictures folder
;
; Notes:
;
; 1. On Windows, if your path is of the form "C:\gimp\hi.emf", make sure you
; change it to have double-backslashes: "C:\\gimp\\hi.emf"
;
; 2. The variable DIR-SEPARATOR contains the folder seperator charcter for the
; given platform ('/' on Linux/Unix, '\' on Windows). Could be used in
; (string-append FOLDER-PATH DIR-SEPARATOR FILE-NAME) to create a new path,
; possibly for saving a file in a different directory.
;
; Example invocation:
;
; (do-it "/home/lightning/tutorial/figure*.png")
(define (do-it file-name-pattern)
(do-it-real (cadr (file-glob file-name-pattern 1))))