Pytania filozoficzne (pytania ogólne)
Scheme? Ki diabeł?Scheme, to dialekt LISPa, jest on nieco inny niż C, C++, Pascal itp ... (jeśli ktoś zna te języki). Ale do prostych skryptów nie powinno być problemów.
http://pl.wikipedia.org/wiki/SchemeScheme, dziwne to takie, czemu akurat on?!Szczerze, to nie wiem. LISP jest dość popularny (no był w każdym razie), zwłaszcza wtedy. Jest używany jako język skryptowy w innych znanych aplikacji. Podejrzewam, że programiści GIMPa znali i lubili LISPa, a Scheme był wtedy na tyle popularny, że postanowili go w GIMPie wkompilować. Wszystkie inne języki skryptowe do GIMPa wymagają dodatkowych wtyczek, lub obecności dodatkowych programów w systemie.
Gdzie mogę poczytać o Scheme'ie?http://www.gimpuj.info/scriptfus-plugins/liniki-do-tutoriali-na-temat-skryptowania-t3811.0.htmlCzemu na forum nie ma żadnych tutków do Schema?Bo po co przepisywać coś, co już na necie jest? (patrz wyżej)
Czy skrypty GIMPa można pisać w innych (niż Scheme) językach?Tak, można np.: w Perlu, Pythonie - to chyba najpopularniejsze (nie licząc Scheme) - można też w C#, Tcl czy Ruby'im (dwóch ostatnich jeszcze w użyciu nie widziałem, ale wierzę w ich istnienie:P)
Ale skąd mam znać te wszystkie funkcje GIMPa?Od tego jest "Przeglądarka procedur" - znajdziesz ją w Dodatkach (na głównym panelu programu).
Poczytałem tutoriale o Scheme'ie, chciałbym coś więcej się pouczyć.Pobierz więc już napisane skrypty i oglądaj ich kod. Skąd je brać?
Heh - a w jakim dziale jesteś?
Jak zainstalować Python-Fu?W Linuksie prawdopodobnie już będzie zainstalowany razem z GIMPem - Python jest na dzień dobry w większości dystrybucji.
W Windowsie w czasie instalacji GIMPa należy wybrać opcję "Zaawansowana instalcja", a wtedy w okienku zaznaczyć opcję obsługi skryptów Python - tutaj mała uwaga - trzeba mieć zainstalowanego Pythona w odpowiedniej wersji.
A mojego pytania tutaj nie ma!Dopisz je poniżej, a doda się je.
Wersja tego FAQv. 0.10 z dnia 2010.06.06
Pytania, które mogą pojawić się przy uruchamianiu swoich, jak i cudzych skryptów.
Napisałem (mam) skrypt do wersji 2.2, ale w nie działa on w wersji 2.4Spróbuj tutaj poszukać pomocy:
http://www.gimp.org/docs/script-fu-update.htmlMam GIMPa 2.6 i pojawia mi się błąd: "Error: Bad syntax of binding spec in let*:"Jeśli składnia jest poprawna, pamiętaliśmy o dodatkowej parze nawiasów, a mimo wszystko dalej mamy problem, to został on wyjaśniony np. tu:
http://gimp.org/release-notes/gimp-2.6.htmlJeżeli w skrypcie, w sekcji
let* znajdują się deklaracje zmiennych, nie zainicjowanych (czyli wpisu typu: "(zmienna)"), np. jak tu:
(let* (
(four (+ 2 2))
(zmienna)
)
Należy je zainicjować jakąś wartością, np. zerem:
(let* (
(four (+ 2 2))
(zmienna 0)
)
Pytania, które pojawią się w akcie tworzenia.
Poprawiłem swój skrypt, zapisałem plik, jednak GIMP jakby tego nie zauważył.Skrypty należy odświeżyć (
Dodatki->
Script-Fu->
Odśwież skrypty)
Przy odświeżanie skryptów, lub ich ładowaniu dostaje komunikat: "Error: syntax error: illegal token"Błąd składniowy, czyli gdzieś brakuje domknięcia nawiasu, lub tych domknięć jest za dużo - przydał bv się edytor, który wyszukuje nawias domykający do danego.
Chciałbym wstawiać polskie znaczki w komentarzach i tekstach ale GIMP ich nie "trawi"Zapisz plik skryptu jako UTF8.
Pojawia mi się "Error: Invalid type for argument", a przecież dobrze wprowadziłem argument.Wyjaśnię na przykładzie, wyświetlamy nowo utworzony obrazek, piszemy więc zgodnie z opisem funkcji z "Przeglądarki procedur"
(gimp-display-new (gimp-image-new 100 100 RGB))
Na pierwszy rzut oka, wygląda w porządku, funkcja gimp-display-new wymaga tylko parametru ID obrazu, zwraca go właśnie funkcja gimp-image-new. Mimo wszystko mamy problem - czemu? A, bo funkcje zwracają zwykle swoje parametry jako listy ( zamiast ID, dostajemy '(ID)), nawet jeśli to listy jednoelementowe - stąd należy pobrać ten element z tej listy - funkcja car.
(gimp-display-new (car (gimp-image-new 100 100 RGB)))
Pojawił mi się "Error: eval: unbound variable: [nazwa]"Czyli wykorzystujemy nie znaną wcześniej zmienną - najczęściej literówka przy nazwach zmiennych lub funkcji.
Uwaga: jeśli posługujesz się starym tutorialem, edytujesz stare wersje skryptów, być może masz problem, który został opisany w pytaniu: "Napisałem (mam) skrypt do wersji 2.2, ale w nie działa on w wersji 2.4".
Gdzie mogę znaleźć opisy atrybutu SF-ADJUSTMENT oraz innych?Zajrzyj do zewnętrznych tutorialów Script-Fu.
Poniżej podaje przykładowe linki do dokumentacji online GIMPa (język angielski) rozdział 3.4.7:
http://docs.gimp.org/2.6/en/gimp-using-script-fu-tutorial-first-script.html#id2590535Polski skrócony opis: http://ds5.agh.edu.pl/~kubek2k/papers/gimp-scheme/scheme.html#SEC7Jak przeliczyć wymiary obrazka, jeśli chcemy skalować go proporcjonalnie, do zadanej np. szerokości?To kwestia prostej proporcji. Proporcja wymiarów obrazka głównego to np.
szerokość / wysokość = "nowa szerokość" / "nowa wysokość"
Oczywiście można też spojrzeć nieco inaczej:
wysokość / szerokość = "nowa wysokość" / "nowa szerokość"
Wymieramy sobie który wzór nam pasuje i wyliczamy wymiar którego nie mamy. Dla przykładu, "nową szerokość":
"nowa szerokość" = (szerokość / wysokość) * "nowa wysokość"
Proste co nie? Analogicznie "nowa wysokość" wynosi:
"nowa wysokość" = wysokość / szerokość * "nowa szerokość"
W kodzie ostatni wzór wygląda następująco:
(set! new-tmp-height (* new-tmp-width (/ (car (gimp-drawable-height drawable)) (car (gimp-drawable-width drawable)))))
Użyto tutaj funkcji
gimp-drawable-height i
gimp-drawable-width służących do pobierania wymiarów istniejącej warstwy.
Mam obraz (IMAGE), jak pobrać warstwę (DARWABLE) dla niego?Można użyć funkcji spłaszczającej:
gimp-image-flatten. Np.:
(darwable (car (gimp-image-flatten image)))
Ale chyba lepiej użyć
gimp-image-get-active-layer. Np.:
(darwable (car (gimp-image-get-active-layer image)))
Jak pogrupować instrukcje skryptu w jedną w podglądzie zmian (przy cofaniu)Należy użyć dwóch poniższych funkcji. Jako parametr przyjmują obraz (IMAGE).
(gimp-image-undo-group-start image)
; ... instrukcje do pogrupowania ...
(gimp-image-undo-group-end image)
Obraz po ukończeniu skryptu jest nieodświeżonyTo zupełnie normalne, należy obraz odświeżyć ręcznie - służy do tego funkcja
gimp-displays-flush.
Jak sprawdzić, czy listy są takie same?Złożone obiekty porównuje się przy użyciu funkcji
equal?.