; PIKA - Photo and Image Kooker Application ; Copyright (C) 1995 Spencer Kimball and Peter Mattis ; ; This program is free software: you can redistribute it and/or modify ; it under the terms of the GNU General Public License as published by ; the Free Software Foundation; either version 3 of the License, or ; (at your option) any later version. ; ; This program is distributed in the hope that it will be useful, ; but WITHOUT ANY WARRANTY; without even the implied warranty of ; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ; GNU General Public License for more details. ; ; You should have received a copy of the GNU General Public License ; along with this program. If not, see . ; Resizes the image so as to include the selected layer. ; The resulting image has the selected layer size. ; Copyright (C) 2002 Chauk-Mean PROUM ; (define (script-fu-util-image-resize-from-layer image layer) (let* ( (width (car (pika-drawable-get-width layer))) (height (car (pika-drawable-get-height layer))) (posx (- (car (pika-drawable-get-offsets layer)))) (posy (- (cadr (pika-drawable-get-offsets layer)))) ) (pika-image-resize image width height posx posy) ) ) ; Add the specified layers to the image. ; The layers will be added in the given order below the ; active layer. ; (define (script-fu-util-image-add-layers image . layers) (while (not (null? layers)) (let ((layer (car layers))) (set! layers (cdr layers)) (pika-image-insert-layer image layer 0 -1) (pika-image-lower-item image layer) ) ) ) ; Allow command line usage of PIKA such as: ; ; pika -i -b '(with-files "*.png" )' ; ; where is the code that handles whatever processing you want to ; perform on the files. There are four variables that are available ; within the : 'basename', 'image', 'filename' and 'layer'. ; The 'basename' is the name of the file with its extension removed, ; while the other three variables are self-explanatory. ; You basically write your code as though it were processing a single ; 'image' and the 'with-files' macro applies it to all of the files ; matching the pattern. ; ; For example, to invert the colors of all of the PNG files in the ; start directory: ; ; pika -i -b '(with-files "*.png" (pika-drawable-invert layer FALSE) \ ; (pika-file-save 1 image layer filename))' ; ; To do the same thing, but saving them as jpeg instead: ; ; pika -i -b '(with-files "*.png" (pika-drawable-invert layer FALSE) \ ; (pika-file-save 1 image layer \ ; (string-append basename ".jpg") ))' (define-macro (with-files pattern . body) (let ((loop (gensym)) (filenames (gensym)) (filename (gensym))) `(begin (let ,loop ((,filenames (cadr (file-glob ,pattern 1)))) (unless (null? ,filenames) (let* ((filename (car ,filenames)) (image (catch #f (car (pika-file-load RUN-NONINTERACTIVE filename)))) (layer (if image (aref (cadr (pika-image-get-selected-layers image)) 0) #f)) (basename (unbreakupstr (butlast (strbreakup filename ".")) "."))) (when image ,@body (pika-image-delete image))) (,loop (cdr ,filenames)) ) ) ) ) )