Witamy, Gość. Zaloguj się lub zarejestruj.
Czy dotarł do Ciebie email aktywacyjny?


Zaloguj się podając nazwę użytkownika, hasło i długość sesji

Strony: [1]
DrukujPobierz PDF
Autor Wątek: [ROZ] Zapis warstw do plików PNG  (Przeczytany 2226 razy)
0 użytkowników i 1 Gość przegląda ten wątek.
gacek56
Użytkownik

Reputacja: 2 Offline Offline

Płeć: Mężczyzna
GIMP: 2.4
Licencja: Copyright
Wiadomości: 17
Galeria Użytkownika



Zobacz profil
« : 25.02.2009, 17:00:07 »

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:
Kod:
(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")
« Ostatnia zmiana: 02.03.2009, 15:24:11 wysłane przez gacek56 » Zapisane
Ziomioslaw
Administrator

Reputacja: 46 Offline Offline

Płeć: Mężczyzna
GIMP: 2.10
JID: ziomioslaw@jabber.org
Licencja: Copyright
Wiadomości: 7 432
Galeria Użytkownika


Cyklista Apokalipsy


Zobacz profil
« Odpowiedz #1 : 25.02.2009, 23:07:40 »

Ty chcesz, te warstwy zapisywać połączone z tłem?

Czyli jak masz: tło, warstwa1, warstwa2 w GIMPie, to chcesz uzyskać:

warstwa1 + tło -> plik1.png
warstwa2 + tło -> plik2.png

tak?
Zapisane
Kasperskyy_
Użytkownik

Reputacja: 3 Offline Offline

Płeć: Mężczyzna
GIMP: 2.6 + GAP
JID: Kasperskyy@jid.pl
Licencja: CC-NC-BY-SA
Wiadomości: 129
Galeria Użytkownika


SneakerS a.k.a. Snikson Bejbe


Zobacz profil
« Odpowiedz #2 : 25.02.2009, 23:31:38 »

Ja zrozumiałem to tak że chce aby zapisywało tak
Tło=Tło.png
Warstwa1=warstwa1.png
itd. a nie zapisuje mu warstwy z tłem.. Tak ? O to chodzi?
Zapisane
Ziomioslaw
Administrator

Reputacja: 46 Offline Offline

Płeć: Mężczyzna
GIMP: 2.10
JID: ziomioslaw@jabber.org
Licencja: Copyright
Wiadomości: 7 432
Galeria Użytkownika


Cyklista Apokalipsy


Zobacz profil
« Odpowiedz #3 : 01.03.2009, 17:55:57 »

Jeśli masz zapamiętaną warstwę tła jak zmienną, to czemu poprostu jej nie nadasz jako parametr funkcji zmieniającej widoczność warstwy?
Zapisane
mmiicc
√ ι ק

Reputacja: 14 Offline Offline

Płeć: Mężczyzna
GIMP: 2.6
Licencja: CC-BY-SA
Wiadomości: 1 423
Galeria Użytkownika



Zobacz profil WWW
« Odpowiedz #4 : 04.03.2009, 13:23:21 »

Wywala mi błąd:

Cytuj
Wystąpił błąd podczas wykonywania script-fu-save-layers-to-files:

Error: car: argument 1 must be: pair


Zapisane

Śledź gimptools.pl na  lub Identi.ca
gacek56
Użytkownik

Reputacja: 2 Offline Offline

Płeć: Mężczyzna
GIMP: 2.4
Licencja: Copyright
Wiadomości: 17
Galeria Użytkownika



Zobacz profil
« Odpowiedz #5 : 05.03.2009, 00:33:17 »

Musiałeś coś źle skopiować. U mnie nie ma błędów.
Przy okazji sprawdzania wprowadziłem do skryptu wyłączenie wszystkich warstw przed zapisem by nie robić tego ręcznie. Oto najnowsza wersja skryptu:
Kod:
(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 (
(layers2 (vector->list (cadr (gimp-image-get-layers image))))
)
(unless (null? layers2)
(gimp-drawable-set-visible (car layers2) FALSE)
(loop (cdr layers2))
)
)


(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")
Zapisane
Strony: [1]
DrukujPobierz PDF
Polskie Forum Użytkowników GIMP-aHyde zoneArchiwum[Archiwum] Pomocna dłoń - GIMPWątek: [ROZ] Zapis warstw do plików PNG
Skocz do: