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

 
Szukanie zaawansowane

86 552 wiadomości w 8 406 wątkach,
wysłane przez 15 763 użytkowników
Najnowszy użytkownik: klonos7

Praca dla Ciebie. Zarabiaj kilka tysięcy miesięcznie.
Strony: [1]
Drukuj
Autor Wątek: Skrypty  (Przeczytany 1095 razy)
0 użytkowników i 1 Gość przegląda ten wątek.
mtx
Użytkownik

Reputacja: 3 Offline Offline

Płeć: Kobieta
GIMP: 2.4
JID: mtx@aqq.eu
Wiadomości: 28
Galeria Użytkownika


Anioł deptany


Zobacz profil WWW
« : 11.11.2007, 20:48:49 »

Mam gimpa 2.4.1. Przez to (przypuszczam) część sktyptów nie działa. Z roszkoszą tu zaprezentuję te problemy:

Skrypt chmura (by Adam Przybyla)
Kod:
(define (script-fu-chmura img drawable)
(let* (
         (type (car (gimp-drawable-type-with-alpha drawable)))
         (image-width (car (gimp-image-width img)))
         (image-height (car (gimp-image-height img)))
         (old-fg (car (gimp-palette-get-foreground)))
         (blank  (cons-array 10 'double))
      )
    (gimp-image-undo-disable img)
    (gimp-layer-add-alpha drawable)
    (plug-in-gauss-rle2 1 img drawable 6 6)
    (plug-in-gauss-rle2 1 img drawable 6 6)
    (gimp-layer-set-preserve-trans drawable TRUE)
    (plug-in-solid-noise 1 img drawable FALSE FALSE 1 7 4.0 4.0)
    (gimp-layer-set-preserve-trans drawable FALSE)
    (set! dr1 (my-duplicate-layer img drawable))
    (plug-in-edge 1 img dr1 2.0 1)
;    (plug-in-edge 1 img drawable 2.0 1)
    (gimp-selection-none img)
    (gimp-by-color-select dr1 '(0 0 0) 15 REPLACE TRUE FALSE 0.0 FALSE)
;    (gimp-by-color-select drawable '(0 0 0) 15 REPLACE TRUE FALSE 0.0 FALSE)
    (gimp-smudge-default drawable 2 blank)
    (gimp-edit-stroke drawable)
    (gimp-image-raise-layer-to-top img drawable)
    (gimp-selection-none img)
    (gimp-palette-set-foreground '(134 139 239))
    (gimp-drawable-fill dr1 0)
    (gimp-palette-set-foreground old-fg)
    (gimp-image-undo-enable img)
    (gimp-levels drawable 0 0 128 6.0 0 255)
    (gimp-displays-flush)
)
)

(define (my-duplicate-layer image layer)
        (let* ((dup-layer (car (gimp-layer-copy layer 1))))
              (gimp-image-add-layer image dup-layer 0)
              dup-layer))

; Register the function with the GIMP:

(script-fu-register "script-fu-chmura"
    "<Toolbox>/Xtns/Script-Fu/Render/Chmury"
    "Tworzy chmure"
    "Adam Przybyla"
    "2001, Adam Przybyla"
    "5 Sierpien 2001"
    ""
    SF-IMAGE "Image" 0
    SF-DRAWABLE "Drawable" 0
)
(blank  (cons-array 10 'double)) mu się nie podoba..
jakieś rady?
poradziłam już sobie z faktem, że się skrypt nie wyświetlał na liście, ale nie jestem taka dobra z edytowaniem skryptów..

* dla zainteresowanych, a lamerów - wklejając to do notatnika i dodając zamiast rozwinięcia txt rozwinięcie scm otrzymacie skrypt do wklejenie do folderu scripts.

Możesz zarobić i spełnić swoje marzenia. Kliknij i zobacz.
« Ostatnia zmiana: 12.11.2007, 00:12:57 wysłane przez mtx » Zapisane
AdRiAnO66
Użytkownik

Reputacja: 2 Offline Offline

Płeć: Mężczyzna
GIMP: 2.4
Licencja: CC-NC-BY-SA
Wiadomości: 50
Galeria Użytkownika


PanDemonium


Zobacz profil
« Odpowiedz #1 : 11.11.2007, 21:18:26 »

Zamień

"cons-array"  na  "make-vector"
Zapisane
mtx
Użytkownik

Reputacja: 3 Offline Offline

Płeć: Kobieta
GIMP: 2.4
JID: mtx@aqq.eu
Wiadomości: 28
Galeria Użytkownika


Anioł deptany


Zobacz profil WWW
« Odpowiedz #2 : 11.11.2007, 21:25:58 »

Cytuj
Wystąpił błąd podczas wykonywania
(script-fu-chmura 15 32)

Error: set!: unbound variable: dr1
Zapisane
AdRiAnO66
Użytkownik

Reputacja: 2 Offline Offline

Płeć: Mężczyzna
GIMP: 2.4
Licencja: CC-NC-BY-SA
Wiadomości: 50
Galeria Użytkownika


PanDemonium


Zobacz profil
« Odpowiedz #3 : 11.11.2007, 21:46:38 »

Należy jeszcze na początku skryptu zadeklarować "x", w starszej wersji "x" można było deklarować jako zmienna globalną w dowolnym miejscu i nie trzeba było go deklarować zaraz na początku, a w aktualnej jest to jakoby procedurą ochronną i wszystkie zmienne należy zadeklarować na początku skryptu. X wymienione tutaj to oczywiście zmienna występująca w tym błędzie - tutaj to będzie "dr1"

Cytuj
Setting an undeclared variable

By far, the most common problem that can be expected if using an older script is that it might assign a value to a variable without first declaring the variable. SIOD-based Script-fu would permit a statement such as (set! x 4) even if 'x' had not been declared -- 'x' would be defined automatically to be a global variable. The new Script-fu protects against this situation and the programmer must declare the variable first. The offending script would result in an error message stating, "Error: set!: unbound variable: x".

The use of global variables is generally discouraged because another function (written by a different author) may have chosen to use the same name and the two functions would interfere with each other. For this reason, the correct method of declaring 'x' in the preceding example is to use the let or let* statement:

Kod:
(let* ( (x 4) )
  ...
  ...
  ...
  )
Proponuję zapoznać się z: http://www.gimp.org/docs/script-fu-update.html#unbound rozwiązuje to kwestię migracji skryptów ze starszych wersji do aktualnej, myślę że niema sensu tego tutaj przepisywać Mrugnięcie
« Ostatnia zmiana: 11.11.2007, 22:30:58 wysłane przez PanDemonium » Zapisane
mtx
Użytkownik

Reputacja: 3 Offline Offline

Płeć: Kobieta
GIMP: 2.4
JID: mtx@aqq.eu
Wiadomości: 28
Galeria Użytkownika


Anioł deptany


Zobacz profil WWW
« Odpowiedz #4 : 11.11.2007, 22:20:46 »

a jak mam zdefiniować dr1?
przepraszam, ale jestem padnięta i ciężko kapuję Język

(let* ( (dr1) )
  ...
  ...
  ...
  )Co?
czy jak?
Zapisane
AdRiAnO66
Użytkownik

Reputacja: 2 Offline Offline

Płeć: Mężczyzna
GIMP: 2.4
Licencja: CC-NC-BY-SA
Wiadomości: 50
Galeria Użytkownika


PanDemonium


Zobacz profil
« Odpowiedz #5 : 11.11.2007, 22:30:19 »

Kurcze może się później (w wolnej chwili niestety :/) wezmę za tłumaczenie tej "migracji" skryptów. Chodzi o to, że we wcześniejszych wersjach można było deklarować zmienne w trakcie pisania kodu, ale wraz z wersją GIMPa 2.4 zmienne skryptu należy deklarować na początku kodu. Do tego dochodzi jeszcze kilka(naście) zmian
Niefortunnie umieściłem niecały cytat, ale zaraz to poprawię.
Zapisane
mtx
Użytkownik

Reputacja: 3 Offline Offline

Płeć: Kobieta
GIMP: 2.4
JID: mtx@aqq.eu
Wiadomości: 28
Galeria Użytkownika


Anioł deptany


Zobacz profil WWW
« Odpowiedz #6 : 11.11.2007, 22:55:16 »

Definiowanie niezdefiniowanych zmiennych

Najczęstrzym problemem związanym z konwertowaniem skryptów przygotowanych dla starszych wersji Gimpa jest że mamy wartość przypisaną do zmiennej, a nie jest wcześniej zdefiniowana (zmienna). Skrypty (Script-fu) oparte na SIOD dozwolą na zapis (set! x 4) nawet jeśli "x" nie zostało opisane - "x" stanie się zmienną globalną. Nowa wersja skryptu chroni przed takimi sytuacjami. Trzeba deklarować najpierw. To chroni przed sytuacjami, że w różnych skryptach mamy taką samą zmienną (które deklarowane jako globalne by miały różne znaczenia i wartości). Dlatego bez definicji zobaczymy error: "Error: set!: unbound variable: x"

Żeby zdefiniować "x" użyj let lub let* :
Kod:
(let* ( (x 4) )
  ...
  ...
  ...
  )


____________
np w skrypcie amazing circle jest:
Kod:
(define (square-crop image)
   
    (let*
    (
        ;Read the image width and height
(width (car (gimp-image-width image)))
(height (car (gimp-image-height image)))

    )

(if (= width height)
()
(begin

;Check which is longer
(if (> width height)
(gimp-image-crop image height height (/ (- width height) 2) 0)
(gimp-image-crop image width width 0 (/ (- height width) 2))

))
)))
__________
to
Kod:
   (set! dr1 (my-duplicate-layer img drawable))
mam zamienić na:
Kod:
(define (dr1)
    (let*
    (my-duplicate-layer img drawable)))
Co?
   
« Ostatnia zmiana: 12.11.2007, 00:16:35 wysłane przez mtx » Zapisane
AdRiAnO66
Użytkownik

Reputacja: 2 Offline Offline

Płeć: Mężczyzna
GIMP: 2.4
Licencja: CC-NC-BY-SA
Wiadomości: 50
Galeria Użytkownika


PanDemonium


Zobacz profil
« Odpowiedz #7 : 14.11.2007, 02:39:38 »

Kurcze nie wiem jak wyglądał efekt tego skryptu bo go nie używałem...Jak możecie to sprawdźcie czy to tak wyglądało.
Kod:
(define (script-fu-chmura img drawable)
(let* (
         (type (car (gimp-drawable-type-with-alpha drawable)))
         (image-width (car (gimp-image-width img)))
         (image-height (car (gimp-image-height img)))
         (old-fg (car (gimp-palette-get-foreground)))
         (blank  (cons-array 10 'double))
(dr1 (my-duplicate-layer img drawable))
      )
    (gimp-image-undo-disable img)
    (gimp-layer-add-alpha drawable)
    (plug-in-gauss-rle2 1 img drawable 6 6)
    (plug-in-gauss-rle2 1 img drawable 6 6)
    (gimp-layer-set-preserve-trans drawable TRUE)
    (plug-in-solid-noise 1 img drawable FALSE FALSE 1 7 4.0 4.0)
    (gimp-layer-set-preserve-trans drawable FALSE)

    (plug-in-edge 1 img dr1 2.0 1 0) ; <-- Ostatnie zero to typ wykrywania krawędzi, można zmieniać od 0 do 5
;    (plug-in-edge 1 img drawable 2.0 1)
    (gimp-selection-none img)
    (gimp-by-color-select dr1 '(0 0 0) 15 REPLACE TRUE FALSE 0.0 FALSE)
;    (gimp-by-color-select drawable '(0 0 0) 15 REPLACE TRUE FALSE 0.0 FALSE)
    (gimp-smudge-default drawable 2 blank)
    (gimp-edit-stroke drawable)
    (gimp-image-raise-layer-to-top img drawable)
    (gimp-selection-none img)
    (gimp-palette-set-foreground '(134 139 239))
    (gimp-drawable-fill dr1 0)
    (gimp-palette-set-foreground old-fg)
    (gimp-image-undo-enable img)
    (gimp-levels drawable 0 0 128 6.0 0 255)
    (gimp-displays-flush)
)
)

(define (my-duplicate-layer image layer)
        (let* ((dup-layer (car (gimp-layer-copy layer 1))))
              (gimp-image-add-layer image dup-layer 0)
              dup-layer))

; Register the function with the GIMP:

(script-fu-register "script-fu-chmura"
    "<Toolbox>/Xtns/Script-Fu/Render/Chmury"
    "Tworzy chmure"
    "Adam Przybyla"
    "2001, Adam Przybyla"
    "5 Sierpien 2001"
    ""
    SF-IMAGE "Image" 0
    SF-DRAWABLE "Drawable" 0
)
Zapisane
Ziomioslaw
Administrator

Reputacja: 35 Offline Offline

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


Cyklista Apokalipsy


Zobacz profil
« Odpowiedz #8 : 14.11.2007, 09:55:55 »

Ten skrypt ma złe "dokowanie"
Skoro pracuje na obrazku, a nie tworzy nowy, powinien być w Filtrach. albo w Script-Fu, no w każdym razie w okienku obrazka - swoją drogą - działa - GIMP 2.4 rc 3
Zapisane

AdRiAnO66
Użytkownik

Reputacja: 2 Offline Offline

Płeć: Mężczyzna
GIMP: 2.4
Licencja: CC-NC-BY-SA
Wiadomości: 50
Galeria Użytkownika


PanDemonium


Zobacz profil
« Odpowiedz #9 : 14.11.2007, 10:51:25 »

Właśnie się zastanawiałem dlaczego go zadokowano w Xtns, ale to przecież można sobie przepisać Mrugnięcie
Dokowanie w Filtry -> Renderowanie -> Chmury -> Chmury...
Kod:
(script-fu-register "script-fu-chmura"
    _"<Image>/Script-Fu/Render/Clouds/Chmury..."
    "Tworzy chmure"
    "Adam Przybyla"
    "2001, Adam Przybyla"
    "5 Sierpien 2001"
    ""
    SF-IMAGE "Image" 0
    SF-DRAWABLE "Drawable" 0
)
Zapisane
Ziomioslaw
Administrator

Reputacja: 35 Offline Offline

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


Cyklista Apokalipsy


Zobacz profil
« Odpowiedz #10 : 14.11.2007, 12:56:24 »

Szkoda, byłoby go zmarnować w Pomocnej dłoń - mamy wszak dział od skryptów, umieść go tam.
Zapisane

AdRiAnO66
Użytkownik

Reputacja: 2 Offline Offline

Płeć: Mężczyzna
GIMP: 2.4
Licencja: CC-NC-BY-SA
Wiadomości: 50
Galeria Użytkownika


PanDemonium


Zobacz profil
« Odpowiedz #11 : 14.11.2007, 13:08:24 »

No ok, ale zastanawiam się czy nadal ten skrypt działa tak jak powinien, czy czegoś nie popsułem Język :> ?
Jak będę pewny, że wszystko jest ok, napewno przerzucę tam Mrugnięcie
Zapisane
mtx
Użytkownik

Reputacja: 3 Offline Offline

Płeć: Kobieta
GIMP: 2.4
JID: mtx@aqq.eu
Wiadomości: 28
Galeria Użytkownika


Anioł deptany


Zobacz profil WWW
« Odpowiedz #12 : 14.11.2007, 13:19:53 »

Error: Item 1 in vector is not a number (argument 3 for function gimp-smudge-default) #( double double double double double double double double double double )

To się pojawiło u mnie.
Zapisane
AdRiAnO66
Użytkownik

Reputacja: 2 Offline Offline

Płeć: Mężczyzna
GIMP: 2.4
Licencja: CC-NC-BY-SA
Wiadomości: 50
Galeria Użytkownika


PanDemonium


Zobacz profil
« Odpowiedz #13 : 14.11.2007, 23:32:09 »

Error: Item 1 in vector is not a number (argument 3 for function gimp-smudge-default) #( double double double double double double double double double double )

To się pojawiło u mnie.
Bo prawdopodobnie masz zamienione cons-array na make-vector, przeglądając przetłumaczone skrypty zauważyłem, że nie zawsze jest to potrzebne, w tym skrypcie do renderowania chmury wystarczyło jedynie zadeklarować zmienną dr1 na początku, w rezultacie skrypt działa pod GIMP 2.4 i konsola nie wywala żadnych błędów Mrugnięcie
Mój pierwszy post w tym wątku wprowadził Cię w błąd za co przepraszam, ale myślałem że to wystarczy.
W załączniku masz gotowy skrypt.
Interesuje mnie (jeżeli zadziała u Ciebie Mrugnięcie) czy wynik działania tego skryptu po tych lekkich "modyfikacjach" jest taki sam jak w poprzednich wersjach GIMPa, ja nie miałem okazji z niego korzystać, a oryginalny skrypt na Gimp Users Group nie działa u mnie na wersji 2.2, nie mam czasu się bawić w odnajdywanie błędów tam, a chciałem przy okazji nauki scriptingu od razu poprawić dla 2.4 tylko nie znam poprzedniego rezultatu działania. Sprawdź proszę skrypt podany powyżej, jak wszystko będzie okej  to przeniosę do skryptów zaktualizowanych dla 2.4 Mrugnięcie
Zapisane
Strony: [1]
Drukuj
Polskie Forum Użytkowników GIMP-aGIMPPomocna dłoń (Moderatorzy: snufkin, RRH)Wątek: Skrypty
Skocz do:  


Kanał IRC #GIMP-PL
GIMP .Edu .pl
GIMP .Edu .pl
GIMP 
WIKI
dodajdo