diff options
Diffstat (limited to 'plug-ins/script-fu/scripts/script-fu-util.scm')
-rw-r--r-- | plug-ins/script-fu/scripts/script-fu-util.scm | 94 |
1 files changed, 94 insertions, 0 deletions
diff --git a/plug-ins/script-fu/scripts/script-fu-util.scm b/plug-ins/script-fu/scripts/script-fu-util.scm new file mode 100644 index 0000000..a22114d --- /dev/null +++ b/plug-ins/script-fu/scripts/script-fu-util.scm @@ -0,0 +1,94 @@ +; GIMP - The GNU Image Manipulation Program +; 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 <https://www.gnu.org/licenses/>. + +; 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 (gimp-drawable-width layer))) + (height (car (gimp-drawable-height layer))) + (posx (- (car (gimp-drawable-offsets layer)))) + (posy (- (cadr (gimp-drawable-offsets layer)))) + ) + + (gimp-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)) + (gimp-image-insert-layer image layer 0 -1) + (gimp-image-lower-item image layer) + ) + ) +) + +; Allow command line usage of GIMP such as: +; +; gimp -i -b '(with-files "*.png" <body>)' +; +; where <body> is the code that handles whatever processing you want to +; perform on the files. There are four variables that are available +; within the <body>: '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: +; +; gimp -i -b '(with-files "*.png" (gimp-drawable-invert layer FALSE) \ +; (gimp-file-save 1 image layer filename filename ))' +; +; To do the same thing, but saving them as jpeg instead: +; +; gimp -i -b '(with-files "*.png" (gimp-drawable-invert layer FALSE) \ +; (gimp-file-save 1 image layer \ +; (string-append basename ".jpg") \ +; (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 (gimp-file-load RUN-NONINTERACTIVE + filename + filename )))) + (layer (if image (car (gimp-image-get-active-layer image)) #f)) + (basename (unbreakupstr (butlast (strbreakup filename ".")) "."))) + (when image + ,@body + (gimp-image-delete image))) + (,loop (cdr ,filenames)) + ) + ) + ) + ) +) |