EDIT: posty w wątku zostały skasowane. Zostawiam ogólny problem jak i jego rozwiązanie.
Witam. Na podstawie różnych skryptów skleciłem skrypt zapisujący warstwy do plików png.
Schemat działania:
warstwa1= NazwaPliku_NazwaWarstwy1.png
warstwa2= NazwaPliku_NazwaWarstwy2.png
warstwa3= NazwaPliku_NazwaWarstwy3.png..itd
Problem polegał na tym, że chciałem uzyskać możliwość zapisania warstw z tłem, którym była jedna z warstw.
Wymagało to przebudowania skryptu tak by widoczne warstwy trafiały do bufora. (przedtem skrypt działał na warstwach w pętli w inny sposób). Z niego następnie idą do zapisu.
Obecny schemat działania umożliwia dodatkowo:
warstwa1+tło= NazwaPliku_NazwaWarstwy1.png
warstwa2+tło= NazwaPliku_NazwaWarstwy2.png
warstwa3+tło= NazwaPliku_NazwaWarstwy3.png..itd
Kod działającego skryptu. Może komuś się przyda:
(define (script-fu-save-layers-to-files image dont-ask display-images backgnd backgnd-id)
(let (
(filename (car (gimp-image-get-filename image)))
)
(set! filename (strbreakup filename "."))
(begin
(if
(or
(= (strcmp (car (last filename)) "bz2") 0)
(= (strcmp (car (last filename)) "gz") 0)
)
(set! filename (butlast filename))
)
(set! filename (unbreakupstr (butlast filename) "."))
)
(when (string=? filename "")
(set! filename (string-append
(car (gimp-temp-name ""))
(car (gimp-image-get-name image))
)
)
)
(let loop (
(layers (vector->list (cadr (gimp-image-get-layers image))))
(bufferName "")
)
(unless (null? layers)
(gimp-drawable-set-visible (car layers) TRUE)
(if (= backgnd TRUE)
(gimp-drawable-set-visible backgnd-id TRUE)
)
(set! bufferName (car (gimp-edit-named-copy-visible image "export-selection_temp_buffer")))
(gimp-drawable-set-visible (car layers) FALSE)
(let* (
(img (car (gimp-edit-named-paste-as-new bufferName)))
(layer-name (car (gimp-drawable-get-name (car layers))))
(new-name (string-append
filename
"_"
layer-name
".png"))
)
(gimp-image-set-filename img layer-name)
(if (= backgnd TRUE)
(if (not (= (car layers) backgnd-id))
(file-png-save2 dont-ask
img
(car (gimp-image-get-active-layer img))
new-name
new-name
TRUE 9 FALSE TRUE FALSE FALSE TRUE FALSE TRUE)
)
)
(if (= backgnd TRUE)
(if (not (= (car layers) backgnd-id))
(if (= display-images FALSE)
(gimp-image-delete img)
(gimp-display-new img)
)
)
)
(if (= backgnd FALSE)
(file-png-save dont-ask
img
(aref (cadr (gimp-image-get-layers img)) 0)
new-name
new-name
TRUE 9 FALSE TRUE FALSE FALSE TRUE)
)
(if (= backgnd FALSE)
(if (= display-images FALSE)
(gimp-image-delete img)
(gimp-display-new img)
)
)
)
(loop (cdr layers)())
))
)
)
(script-fu-register "script-fu-save-layers-to-files"
_"Save all layers to PNG."
_"Save all layers to PNG"
"Piotr Gecow (gacek56@tlen.pl)"
"Piotr Gecow"
"2009-03-02"
""
SF-IMAGE "Obazek" 1 ;;image
SF-TOGGLE _"Don't ask all the time" TRUE ;;dont-ask
SF-TOGGLE _"Display image in GIMP?" FALSE ;;display-images
SF-TOGGLE _"Save with background?" FALSE ;;backgnd
SF-LAYER _"Background" TRUE) ;;backgnd-id
(script-fu-menu-register "script-fu-save-layers-to-files"
_"<Image>/Script-Gacek/Zapis")