; The GIMP -- an image manipulation program ; Copyright (C) 1995 Spencer Kimball and Peter Mattis ; ; Explode via Transparent Layer NG ; Copyright (c) 2000-2002 Matteo Nastasi aka MatOfPenguins aka mop ; nastasi@alternativeoutput.it ; matteo.nastasi@milug.org ; ; Take all layers with particular prefix, put disable everyone of this, ; and to loop for enable one to one, copy the image, crop and save it ; with the name of layer. ; ; ; 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 2 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, write to the Free Software ; Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. (define (script-fu-mop-im-explode-via-trasplay-batch filename pref ext path) (let* ((image 0) (drawable 0)) (set! image (car (gimp-file-load RUN-NONINTERACTIVE filename filename))) (set! drawable (car (gimp-image-get-active-layer image))) (script-fu-mop-im-explode-via-transplay image drawable pref ext path) (gimp-image-delete image) (gimp-quit 0) )) (define (script-fu-mop-im-explode-via-transplay img drw pref type path) ; disable undo (let* ((char-num 0) (layarray 0) (nlay 0) (lay-arr 0) (ct 0) (i 0) (curlay 0) (namelay 0) (namelaylen 0) (name 0) (namelen 0) (nw-img 0) (nw-layarray 0) (nw-lay-arr 0) (nw-ct 0) (nw-i 0) (nw-curlay 0) (nw-namelay 0) (nw-w 0) (nw-h 0) (nw-x 0) (nw-y 0) (offsets 0) (fla 0) (namefile 0)) (gimp-image-undo-freeze img) ; number of char in prefix ; (gimp-message (string-append "pref: " pref)) (set! char-num (string-length pref)) ; extract number and array of layer (set! layarray (gimp-image-get-layers img)) (set! nlay (car layarray)) (set! lay-arr (cadr layarray)) (set! ct 0) (set! i 0) (while (< i nlay) ; (gimp-message "in while") (set! curlay (aref lay-arr i)) (set! namelay (car (gimp-layer-get-name curlay))) (if (and (>= (string-length namelay) char-num) (equal? (substring namelay 0 char-num) pref)) (begin ; (gimp-message (string-append "save layer: " namelay)) (set! namelaylen (string-length namelay)) (set! name (substring namelay char-num namelaylen)) (set! namelen (string-length name)) ; if layer start with pref dup image and save only this active (set! nw-img (car (gimp-image-duplicate img))) ; (set! nw-img2 (car (gimp-image-duplicate img))) ; (set! fla2 (car (gimp-image-merge-visible-layers nw-img2 0))) ; (set! namefile (string-append path "/" name "_orig." type)) ; (gimp-file-save 1 nw-img2 fla2 namefile namefile) (set! nw-layarray (gimp-image-get-layers nw-img)) (set! nw-lay-arr (cadr nw-layarray)) (set! nw-ct 0) (set! nw-i 0) (while (< nw-i nlay) ; (gimp-message "in while2") (set! nw-curlay (aref nw-lay-arr nw-i)) (if (= nw-i i) (begin ; (gimp-image-set-active-layer nw-img nw-curlay) ; (gimp-message "begin if") (set! nw-namelay (car (gimp-layer-get-name nw-curlay))) ; (gimp-message (string-append "layer activated = nw-i: " nw-namelay (number->string nw-i))) (gimp-layer-set-visible nw-curlay TRUE) (set! nw-w (car (gimp-drawable-width nw-curlay))) (set! nw-h (car (gimp-drawable-height nw-curlay))) (set! offsets (gimp-drawable-offsets nw-curlay)) (set! nw-x (car offsets)) (set! nw-y (cadr offsets)) ) (begin ; (gimp-image-set-active-layer nw-img nw-curlay) (set! nw-namelay (car (gimp-layer-get-name nw-curlay))) ; (gimp-message (string-append "begin else xx " nw-namelay)) (if (and (>= (string-length nw-namelay) char-num) (equal? (substring nw-namelay 0 char-num) pref)) (gimp-layer-set-visible nw-curlay FALSE) ) (if (and (>= (string-length nw-namelay) (string-length (string-append name "-"))) (equal? (substring nw-namelay 0 (+ namelen 1)) (string-append name "-"))) (begin ; (gimp-message (string-append "layer activated: " nw-namelay)) (gimp-layer-set-visible nw-curlay TRUE) ) ) ; (gimp-message "end else") )) (set! nw-i (+ nw-i 1)) ) ; (gimp-message "out while2") (gimp-crop nw-img nw-w nw-h nw-x nw-y) (set! fla (car (gimp-image-merge-visible-layers nw-img 0))) ; (set! fla (car (gimp-image-flatten nw-img))) ; (gimp-message (string-append namelay "." type)) ; (set! namelen (string-length namelay)) ; (set! namefile (string-append path "/" (substring namelay ; char-num namelen) ; "." type)) (set! namefile (string-append path "/" name "." type)) (gimp-file-save 1 nw-img fla namefile namefile) ; (file-png-save2 1 nw-img fla namefile namefile 0 9 1 1 1 1 1 0 1) ; (file-png-save2 1 nw-img fla namefile namefile 1 9 0 0 0 0 0 1 0) (gimp-image-delete nw-img) ; (gimp-display-new nw-img) (set! ct (+ ct 1)) ) ) (set! i (+ i 1)) ) ; end of while ; (gimp-message "the end") (gimp-image-undo-thaw img) ) ) (script-fu-register "script-fu-mop-im-explode-via-transplay" "/Script-Fu/MOP/Explode via Trasp Lay" "Convert a selection to a new transparent layer" "Matteo Nastasi " "Matteo Nastasi" "09/11/2000" "RGB RGBA GRAY GRAYA" SF-IMAGE "Image" 0 SF-DRAWABLE "Drawable" 0 SF-STRING "Prefix" "SUB_" SF-STRING "Extension" "png" SF-DIRNAME "Path" ".")