Skript-Fu-Einstieg: Grundlagen

Aus GIMPForum

Wechseln zu: Navigation, Suche
^ Inhaltsverzeichnis ^ Variablen >>

Skript-Fu-Grundlagen

Skript-Fu ist eine speziell für GIMP angepasste Version von Scheme, was ein Dialekt von LISP ist. Falls du noch nie mit LISP oder einer ähnlichen Sprache gearbeitet hast, wird dir anfangs wohl vor allem die Schreibweise etwas Mühe bereiten. Aber keine Sorge, daran gewöhnt man sich mit der Zeit. In diesem Kapitel werden einfach mal die grundlegendsten Dinge Skript-Fus erklärt. Wenn du bereits mit einer LISP-ähnlichen Sprache zu tun hattest, kannst du dieses Kapitel (und die nächsten drei) gleich überspringen.

Kommen wir zu den Basics:
1.) Skript-Fu verwendet eine spezielle Notation: die Präfixnotation. Die Präfixnotation ist eine Schreibweise von beispielsweise Rechnungen. Normalerweise verwenden wir die folgende Schreibweise: 4 + 5
Diese Schreibweise heißt Infixnotation (in = zwischen). Bei der Präfixnotation (prae = vor) wird das Operationszeichen (in unserem Fall ein Plus) vor den Operanden (4 und 5) geschrieben. Das Ganze würde dann so aussehen: + 4 5.

Weiter unten wird + in Skript-Fu genutzt und dort wird 4 + 5 + 1 als Beispiel genommen, ist also etwas allgemeiner!

2.) Jede Funktion wird in Klammern geschrieben, wobei das erste Element der Name der Funktion ist.

Funktion: Eine Funktion kann eine bestimmte Abfolge von Befehlen die unter einem Namen gespeichert werden, aber auch solch grundlegend Operationen wie die Addition sein.
Die Beispielrechnung aus 1) sieht mit der Präfixnotation so aus: (+ 4 5 1)


3.) Die meisten Funktionen haben einen sogenannten Rückgabewert.

Rückgabewert: Der Rückgabewert ist nichts anderes als, das was eine Funktion zurück gibt. In unserem Beispiel von (+ 4 5 1) wäre der Rückgabewert 10. Es ist also sozusagen das Ergebnis.


4.) Wenn du mit Skript-Fu arbeitest wirst du häufig mit den unterschiedlichsten Datentypen zu tun haben. Es ist zwar nicht zwingend notwendig, dass du weißt, was ein Datentyp ist, allerdings ist es einfacher zu verstehen was du genau tust, wenn du weißt was so ein Datentyp ist.
Für dich als Mensch ist 16 die Zahl sechzehn. Ob du diese 16 nun in einer Rechnung wie 16 + 2 = 18 verwendest oder ob du sie z.B. als Mengenangabe in einem Satz wie "Ich habe 16 Kilo zugelegt" brauchst, spielt für dich keine Rolle.
Der Computer hingegen sieht da einen Unterschied. Mit der Zahl 16 kann er beispielsweise Rechnen, aber er könnte dieselbe 16 nicht in einem Satz ausgeben. Da müsstest du die 16 in Gänsefüßchen stellen, um dem Computer zu sagen, dass das keine Zahl sondern ein Text sei. Allerdings wäre dann das Rechnen mit dem Wert nicht mehr möglich.
Der Grund dafür sind die bereits angesprochenen Datentypen. Ein Datentyp definiert genau, was für Werte erlaubt sind (ganze Zahlen, Fleisskommazahlen, Text etc.) und was mit ihm machbar ist und was nicht. Wenn du beispielsweise einen Gaußscher Weichzeichner mit dem Text 16 anwenden willst, wird GIMP nur meckern, dass er eine Zahl benötigt und keinen Text. Deshalb ist es wichtig, dass du immer die korrekten Datentypen verwendest.
Unten sind die meisten Datentypen aufgelistet, denen du in Skript-Fu begegnen wirst.

  • INT32 steht für Integer und ist der englische Begriff für Ganzzahl. Das heißt eine Zahl ohne Nachkommastellen.
  • FLOAT ist eine eine Zahl mit Kommastellen (float engl. = Fließkommazahl). Bei Fließkommazahlen ist zu beachten, dass die Vor- und Nachkommastellen mit einem Punkt (.) und nicht mit einem Komma (,) abgetrennt werden.
  • STRING ist eine Zeichenkette (string engl. = Kette, Strang) und wird für Texte verwendet. Werte, die diesen Datentyp habe werden immer in "Gänsefüßchen" geschrieben.
  • LIST kann mehrere Werte verschiedener Datentypen enthalten.
  • ARRAY kann mehrere Werte des selben Datentyps enthalten. Kommt immer in Verbindung mit einem anderen Datentyp vor wie INT8ARRAY. Dieser Datentyp ist allerdings eher selten.
  • IMAGE enthält eine eindeutige Kennzeichnung eines Bildes in GIMP.
  • LAYER enthält eine eindeutige Kennzeichnung einer Ebene in GIMP.
  • DRAWABLE enthält eine eindeutige Kennzeichnung einer Zeichenfläche (~Ebene) in GIMP.


Wenn dir das mit den Datentypen noch nicht so ganz klar ist, mach einfach mal weiter. Vielleicht wird dir ein Licht aufgehen, wenn du mit ihnen arbeitest und ansonsten gibt es immer noch Wikipedia und das Forum.


So, genug der trockenen Theorie. Versuchen wir das Gelernte in die Tat umzusetzen. Öffne zuallererst GIMP; wähle nun in der Toolbox Extras/Skript-Fu/Skript-Fu-Konsole. (Unter GIMP 2.6 Bildfenster/Filter/Skript-Fu/Skript-Fu Konsole) Es sollte sich jetzt das folgende Fenster geöffnet haben:

Das große Textfeld, ist der Ausgabebereich. Hier erscheinen deine Eingabe, der Rückgabewert und Fehlermeldungen. Das kleine einzeilige Feld ist der Eingabebereich. Hier kannst du deine Befehle eintippen und mit Enter bestätigen.

Probieren wir das doch gleich einmal aus. Gib folgenden Text i ein (+ 1 1). Und, was ist geschehen? Wenn du die richtige Eingabe (Abstände und Klammern richtig gesetzt) gemacht hast, dann wirst du unter deiner Eingabe jetzt die Zahl 2 sehen. Natürlich kannst du bei einer Rechnung nicht nur einzelne Zahlen verwenden. Du kannst als Operanden auch ganze Rechnungen nehmen oder Variablen, welche wir aber erst im nächsten Kapitel behandeln werden.

Beispielsweise ist auch solch eine Eingabe möglich: (+ (- 3 2) 4)
Mit der "normalen" Schreibweise würde das dann so aussehen: (3 - 2) + 4 also 1 + 4
Oder so was: (* (+ 2 1) (/ 6 2))
Mit der Infixnotation sähe das so aus: (2 + 1) * (6 / 2)

Operand: Ein Operand ist in einer Rechnung alles, was nicht ein Operationszeichen ist. Bei meinem Beispiel von (+ 1 1) wären 1 und 1 die Operanden und das Plus das Operationszeichen.


Falls du dich noch nicht ganz so sicher fühlst was die Schreibweise von Skript-Fu angeht, solltest vielleicht einige der nachfolgenden Übungen lösen; die Lösungen sind weiter unten zu finden.

Übungen:

Aufgabe 1: 4 + 7

Aufgabe 2: 81 / 9

Aufgabe 3: 4 * 3 * 10

Aufgabe 4: 3.5 - 2

Aufgabe 5: 3 * 2

Aufgabe 6: (71 + 2) / 5

Aufgabe 7: 9 * (8 / 2)


Und dann noch eine etwas schwierigere Aufgabe (nicht vergessen, Klammern werden zuerst gerechnet, dann Punkt-(*, /) und erst am Schluss Strichrechnungen(+, -)).
Aufgabe 8: 27 * 3 + (10 / (5 * 2))

Falls du diese Aufgabe nicht lösen kannst, ist das auch nicht weiter tragisch. Solch komplexen Verschachtelungen kommen im weiteren Verlauf dieses Tutorials nicht mehr vor.


Lösungen:

Aufgabe 1: (+ 4 7)
Aufgabe 2: (/ 81 9)
Aufgabe 3: (* 4 3 10)
Aufgabe 4: (- 3.5 2)
Aufgabe 5: (* 3 2)
Aufgabe 6: (/ (+ 71 2) 5)
Aufgabe 7: (* 9 (/ 8 2))
Aufgabe 8: (+ (* 27 3) (/ 10 (* 5 2)))
^ Inhaltsverzeichnis ^ Variablen >>
Persönliche Werkzeuge