mirror of
https://gitlab.gnome.org/GNOME/gimp.git
synced 2025-07-14 14:37:40 +00:00

This is not the macro business to quit GIMP. The user may still have processing to do after looping over images.
88 lines
3.3 KiB
Scheme
88 lines
3.3 KiB
Scheme
; 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 <http://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 three variables that are available within
|
|
; the <body>: 'basename', 'image', and 'layer'. The 'basename' is the
|
|
; name of the file with its extension removed, while the other two
|
|
; 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-invert layer) \
|
|
; (gimp-file-save 1 image layer \
|
|
; (string-append basename ".png") \
|
|
; (string-append basename ".png") ))'
|
|
|
|
(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))
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|