gimpusers.de-Logo
Deutsche Version Englische Version

Nicht angemeldet

Registrieren! | Passwort vergessen?

Neue Auflage: Das Praxisbuch zu GIMP 2.6

Gestaltet ein cooles Werbeplakat!

7. Gewinnspiel — Einsendungen von 8.Juli bis 2. August 2010.
Mehr Infos (News)
Übersicht und Details
Uploadet hier ab 8.Juli

Aktuelle Diskussionen (gimpforum.de)

  1. gimpforum.de | gestern 18:55
    Puppet warp für Gimp?
  2. gimpforum.de | gestern 18:23
    Bild als Formvorlage??
  3. gimpforum.de | gestern 12:52
    Kann Gimp aus 2 Bildern eine Animation(die Zwischenbilder berechnen) ertsellen?
  4. gimpforum.de | 30. Jul 2010 21:45
    Gesuch Free Grafiker gesucht -> Herrausforderung
  5. gimpforum.de | 30. Jul 2010 00:58
    Bild mit Farbmaske versehen

Aktuelle Forumsbeiträge (englisch)

Die Beiträge stammen aus den englischen Foren. Ihr könnt jederzeit zurück zur deutschen Version, indem ihr auf die deutsche Flagge ganz oben klickt.

  1. gimp-developer | gestern 23:40
    Plugged-in tools
  2. gimp-developer | gestern 23:22
    html layers
  3. gimp-developer | gestern 21:26
    Please fix Color and/or Value transfer mode
  4. gimp-user | gestern 15:15
    PDF editing in Gimp
  5. gimp-docs | gestern 15:12
    Where does the HTML documentation

Neuigkeiten von Dritten

Umfrage

Was haltet ihr von der Einbindung sozialer Netzwerke in Webseiten?

Finde ich sehr gut, es bringt die Nutzer zusammen

Für Communities macht es Sinn (Nachrichten über Twitter, Facebook-Gruppen usw), für andere Seiten nicht

Ein Hype, der bald wieder aufhören wird

Sowas macht mir Angst (Datenschutz, Privatsphäre, ...)

Anderes (bitte posten)

Ergebnisse ansehen

Zahlen

gimpusers.de RSS-Feed

RSS-Feed Retweet this!

09. Sep 2006 12:36, von redforce (Richard H.)

Skript-Fu-Einführung

Mit Skript-Fu gibt es eine mächtige Möglichkeit, Vorgänge in GIMP zu automatisieren und Skripts für alles Mögliche zu erstellen. Hier werden die Grundlagen erklärt, die man braucht, um eigene GIMP-Skripts zu schreiben bzw. andere zu verstehen.

Verwendete GIMP-Version: 2.4. Das Tutorial ist in 15 Schritte unterteilt; ein durchschnittlicher Benutzer benötigt dafür ca. 60 min. Bisher 57290 Mal gelesen. Kategorie: Scripts & Programmierung, Schwierigkeit: 4 von 5

6 Kommentare wurden bisher geschrieben.

Dateien, die für dieses Tutorial benötigt werden:

Wichtige Links:

  1. 1
    Alle Funktionen, die GIMP über die GUI (grafische Benutzerschnittstelle) dem Benutzer anbietet, können auch von Skripten (Makros) genutzt werden. Mit solchen Skripten kann man Vorgänge, z.B. bestimmte Effekte oder Filter, automatisieren (Script-Fu bzw. Skript-Fu). GIMP unterstützt mehrere Programmiersprachen, mit denen die GIMP-Befehle verwendet und GIMP-Skripts geschrieben werden können (Bindings). Seit Anfang an ist Scheme dabei. In dieser Sprache wird das klassische Skript-Fu geschrieben; damit wollen wir uns in diesem Tutorial beschäftigen. Es gibt aber auch die Möglichkeit, Skripts mit gimp-perl bzw. Python (Python-Fu) zu schreiben.
  2. 2
    Scheme ist ein LISP-Dialekt. Scheme besitzt nicht viele von anderen Programmiersprachen gewohnte Features (z.B. keine Schleifen), dafür gibt es auch wenig Einschränkungen.

    Jemand, der andere Programmiersprachen beherrscht, wird sich relativ schnell mit Scheme zurechtfinden, auch wenn es ein paar Eigenheiten aufweist. Aber auch für Neulinge ist es nicht so schwer zu lernen, wenn man z.B. vorhandene Skripts kopiert und nur die relevanten Stelle ändert.

    GIMP besitzt auch eine Skript-Fu-Konsole (Xtns / Skript-Fu / Skript-Fu-Konsole). Diese kann dazu verwendet werden, um einzelne Befehle auszuführen, Skripts zu testen usw.

    Wir starten die Skript-Fu-Konsole.
    Screenshot of step 2
    Zum Vergrößern klicken
  3. 3
    Folgenden Befehl geben wir in die Skript-Fu-Konsole ein:
    (gimp-message "Hier spricht GIMP!")
    Eine Dialogbox sollte erscheinen.

    Erklärung:
    Jeder Befehl wird innerhalb von Klammern geschrieben. Der erste Ausdruck nach der öffnenden Klammer ist der Befehl, dann folgen die Parameter (hier nur 1 Parameter, und zwar der auszugebende Text) und dann die schließende Klammer.
    Screenshot of step 3
    Zum Vergrößern klicken
  4. 4
    Alle Befehle, die von GIMP zur Verfügung gestellt werden, können im Prozedurbrowser PDB angeschaut werden.

    Wir starten mit Xtns / Prozedurbrowser den PDB. Bei "Suche:" geben wir "gimp-message" ein und erhalten rechts Informationen über diese Funktion. Es wird auch mitgeteilt, dass diese Funktion nur 1 Parameter vom Typ STRING (Zeichenfolge) hat, der in UTF-8-Kodierung angebeben werden muss.

    Der Prozedurbrowser ist beim Programmieren von Skript-Fu von großer Bedeutung, da er eine vollständige Referenz von GIMP-Befehlen ist. Wenn man einen Vorgang aus einem Skript heraus ausführen will (z.B. eine Bild duplizieren), muss man im Skript-Fu danach suchen ("duplicate"), die Ergebnisse durchschauen und die passende Funktion, so man sie gefunden hat, verwenden.
    Screenshot of step 4
    Zum Vergrößern klicken
  5. 5
    Zur Syntax: Wie oben bereits erwähnt, werden Befehle von runden Klammern umgeben:
    (Befehl Parameter1 Parameter2 ...)

    Das erste Wort muss nicht unbedingt ein Befehl, sondern kann auch ein Operator sein:
    (+ 6 2) hat den Wert 8 (Operator +, die zwei Parameter sind 6 und 2)
    (if (= var 0) (befehl1) (befehl2)) Wenn var=0, führe befehl1 aus, sonst befehl2 (Näheres zu if unten)

    Alles, was in einer Zeile ab einem Strichpunkt steht, wird als Kommentar angesehen und nicht ausgeführt:
    ; Dies ist ein Kommentar

    Man beachte den Befehl print (im Screenshot), der nicht im PDB angezeigt wird, weil er vom Scheme-Interpreter und nicht von GIMP zur Verfügung gestellt wird. Mit print kann der Inhalt von Ausdrücken in der Skript-Fu-Konsole angezeigt werden. Das ist zum Debuggen sehr nützlich.
    Screenshot of step 5
    Zum Vergrößern klicken
  6. 6
    Scheme kennt natürlich auch Variablen und Konstanten. Diese werden ohne Präfix (kein $, % usw) mit normalen Wörter bezeichnet. Die Zuweisung erfolgt mit define (Konstanten) bzw. let und set (Variablen).

    Folgende Datentypen existieren:
    * Prozeduren: Für die Definition von Unterprogrammen (Prozeduren) gibt es keinen eigenen Befehl, sondern sie werden wie jeder andere Datentyp behandelt. So wie einer Variable ein Wert zugewiesen wird, wird einer Prozedur der Codeblock zugewiesen, den sie beinhalten soll.
    * Listen
    * Ganze Zahlen (beliebig groß)
    * Dezimalzahlen
    * Zeichenketten (Strings)
    * Boolean (wahr: #t bzw. falsch: #f)
  7. 7
    Variablen können global mit set! gesetzt werden.
    Beispiel auf der Skript-Fu-Konsole:
    (set! s "GIMP! GIMP! GIMP!")
    (gimp-message s)


    Für lokale Variablen, d.h. solche, die nur innerhalb eines bestimmten Codebereiches gültig sind, ist es etwas komplizierter:
    (let ((name1 wert1) (name2 wert2)) (befehl1) (befehl2))

    Der erste Parameter (rot) besteht aus beliebig vielen Zuweisungen der Form (Var.name Wert), der Codeblock (blau) besteht aus beliebig vielen Anweisungen, in denen die Variablen gültig sind. Beispiel aus der Praxis:

    (let* (
    (fname (car f))
    (img (car (gimp-file-load 1 fname fname)))
    )

    (gimp-image-undo-disable img)
    (gimp-image-scale img newx newy 0 0)
    (gimp-file-save 1 img (car (gimp-image-get-active-drawable img)) fname fname)
    (gimp-image-delete img)

    )


    Hier wurde let* statt let verwendet. Der Unterschied ist, dass bei let* die Variablen in der angegebenen Reihenfolge definiert werden. Bei let könnte GIMP zuerst "img" und dann "fname" setzen, was nicht funktionieren würde.

    Hier sehen wir auch, dass jeder "Wert" auch durch einen geklammerten Ausdruck ersetzt werden kann: fname wird der Wert von "(car f)" zugewiesen usw.

    Konstanten und Funktionen werden mit define gesetzt:
    (define c 300000000) ; Lichtgeschwindigkeit
    (define (func)
    (gimp-message "func wurde aufgerufen")
    )
    (func) ; Funktion aufrufen
    Screenshot of step 7
    Zum Vergrößern klicken
  8. 8
    Listen bestehen in Scheme immer aus einem Kopf und einem Rest (nichts dazwischen). Auf den Kopf greift man mit car zu, auf den Rest mit cdr. Will man mehr als 2 Elemente auflisten, werden die Listen verschachtelt. Allerdings kann man der Einfachkeit halber mehr als 2 Listenelemente mit einem Befehl setzen:
    (set! l '(1 2 3 4 5))
    Das einfache Anführungszeichen steht hier für "Liste".

    Die Liste sieht jetzt im Speicher so aus:
    (1 (2 (3 (4 5))))

    Mit car können wir den Listenkopf anschauen, mit cdr den Rest:
    (car l) => 1
    (cdr l) => (2 3 4 5)

    GIMP-Funktionen liefern als Rückgabewert immer eine Liste. So können theoretisch mehrere Rückgabewerte auf einmal zurückgegeben werden; das wird aber (noch) von keiner GIMP-Funktion verwendet. Will man auf den eigentlich Rückgabewert zurückgreifen, muss man also car verwenden. Skript-Fu-Konsole
    (print (car (gimp-version))) => "2.3.11"

    Zum Iterieren von Listen verwendet man rekursive Funktionsaufrufe.
    Screenshot of step 8
    Zum Vergrößern klicken
  9. 9
    Eine Fallunterscheidung / if-Anweisung hat folgende Syntax:
    (if bedingung then-codeblock else-codeblock)

    Beispiel:
    (if (> x 0)
    (print "x ist positiv")
    (print "x ist nicht positiv")
    )
  10. 10
    Nachdem wir jetzt die Grundlagen der Syntax beherrschen, können wir beginnen, Skripts zu schreiben. Wenn wir aber nicht immer die Skript-Fu-Konsole verwenden wollen und das Skript auch in GIMP-Menü erscheinen soll, muss eine bestimmte Vorgangsweise eingehalten werden.

    Das Skript selbst wird als .scm-Datei in ~/.gimp-2.3 (bzw. -2.4) abgelegt. Hier laden wir die Datei "beispiel.scm" (rechts unter Downloads verfügbar) in das gimp-Skript-Verzeichnis.
    Screenshot of step 10
    Zum Vergrößern klicken
  11. 11
    Wenn wir das Skript dort abgelegt haben und den GIMP 2.4 (2.3) starten (oder, falls der GIMP bereits gestartet ist: Xtns / Skript-Fu / Skripte auffrischen), findet sich unter Xtns / Verschiedenes jetzt das "Beispielskript". Hier noch einmal der Inhalt (ohne Einrückungen):

    (define (script-fu-beispiel parameter)
    (gimp-message parameter)
    )


    ; Im GIMP und im Menü registrieren
    (script-fu-register "script-fu-beispiel"
    _"_Beispielskript"
    "Illustriert den Aufbau eines GIMP-Skripts"
    "Richard Hirner"
    "2006, Richard Hirner"
    "Sep 10, 2006"
    ""
    SF-STRING "Erster Parameter" "Hallo!")

    (script-fu-menu-register "script-fu-beispiel"
    "<Toolbox>/Xtns/Misc")

    Screenshot of step 11
    Zum Vergrößern klicken
  12. 12
    Ganz oben im Code wird die Funktion, die aufgerufen wird, wenn das Skript-Fu ausgeführt wird, definiert (braun).

    Die Funktion heißt "script-fu-beispiel" und hat einen Parameter namens "parameter". Die Funktion ruft nur gimp-message auf und zeigt somit eine Dialogbox mit dem Inhalt von "parameter" an.

    In anderen Skripts gehört hier statt gimp-message der Code, der die Bildbearbeitung durchführt, eingesetzt.
  13. 13
    script-fu-register registriert die Funktion "script-fu-beispiel" im GIMP (rot). Sie ist dann auch im PDB einsehbar (siehe Screenshot). Die Parameter:
    1. Name der Funktion, die registriert wird
    2. Wo im Menü die Funktion registriert werden soll (der Unterstrich signalisiert, dass der Eintrag im Menü extra gemacht wird, siehe unten)
    3. Beschreibung
    4. Autor
    5. Copyright
    6. Datum
    7. Auf welche Bilder das Skript angewendet werden kann. Mögliche Werte: "*" für alle Bilder, "RGB" oder "GRAY" für RGB- bzw. Graustufenbilder (in allen 3 Fällen muss ein solches Bild offen sein, damit das Skript aufgerufen werden kann); ein leerer String "" bedeutet, dass das Skript ein neues Bild erzeugt bzw. ohne offenes Bild verwendet werden kann.
    8. Liste mit Parametern des Skripts, alle in der Form:
    SF-TYP "Beschreibung" "Standardwert"
    SF-TYP kann dabei verschiedene Werte annehmen, siehe unten.

    Im Menü wird das Skript mit der Funktion script-fu-menu-register registriert (blau).
    Parameter:
    1. Funktion, die registriert wird
    2. Ort im Menü (hier "<Toolbox> / Xtns / Misc")
  14. 14
    Möglichkeiten für die Parameter (SF-TYP Beschreibung Standardwert):

    SF-VALUE "Zahlenwert eingeben:" 5
    SF-STRING "Zeichenkette eingeben:" "beliebiger Text"
    SF-FONT "Schrift auswählen:" "Times"
    SF-COLOR "Farbe:" '(255 0 0)
    SF-TOGGLE "Kopie erstellen?" TRUE
    SF-FILENAME "Originaldatei:" "*.jpg"
    SF-PATTERN "Hintergrundmuster:" "Craters"
    SF-GRADIENT "Verlauf:" "CD"

    SF-IMAGE "Ausgangsbild" 0
    SF-DRAWABLE "Ausgangsebene"
    (Gehört zusammen)

    SF-ADJUSTMENT "Wert einstellen:" '(22 2 100 1 1 0 1)
    Die Liste beinhaltet:
    Anfangswert, minimaler Wert, maximaler Wert, minimale Schrittweite, maximale Schrittweite, [0] Werte als Ganzahl oder [1] Werte als Kommazahl, [0] Schieberegler oder [1] Zählbox

    Die Parameter werden in der Reihenfolge, wie sie bei script-fu-register angegeben werden, an die registrierte Funktion übergeben.

    Führt man das Skript-Fu im GIMP aus, erscheint eine Dialogbox, in der man diese Parameter einstellen kann. Klickt man dann auf "OK", wird die registrierte Funktion ausgeführt. Im Dialog erscheint dann, was das Skript gerade tut. Wenn die registrierte Funktion fertig ist, schließt sich der Dialog.
  15. 15
    Viel Spaß beim Herumexperimentieren! Es empfiehlt sich auch, die bereits mitgelieferten Skript-Fus (im script-Verzeichnis) eingehend zu studieren.

    Diese liegen unter Linux meist in /usr/local/share/gimp/2.0/scripts/, bei Windows einfach im scripts-Verzeichnis von GIMP.

Dieses Werk unterliegt folgender Lizenz: Namensnennung-Keine kommerzielle Nutzung 3.0 Österreich

Kommentare

Hier können Sie Ihre Kommentare, Frage und Anregungen loswerden. Der Autor und die anderen Benutzer können Ihren Beitrag sehen und darauf antworten. Natürlich können Sie auch im Chat fragen.

Die Kommentare sind chronologisch geordnet.

  1. http://www.gimpusers.de/tutorials/skript-fu-einfuehrung.html Mon Jun 11 18:48:48 2007 Matze, 11. Jun 2007 18:48

    Nettes Tut!
    Hat jemand ICQ an den ich mich wenden kann falls ich Fragen habe? Der Autor antwortet nicht ;-)
    Ach ja, tut mir Leid hier einen (evtl.) unqualifizierten Post hinterlassen zu haben, ich bin noch neu hier =)
    greetz

  2. http://www.gimpusers.de/tutorials/skript-fu-einfuehrung.html Sat Feb 2 17:45:14 2008 Peter, 02. Feb 2008 17:45

    tolles tutorial!
    hat mir sehr geholfen!

  3. http://www.gimpusers.de/tutorials/skript-fu-einfuehrung.html Fri Mar 28 11:52:32 2008 Anakain, 28. Mar 2008 11:52

    Kann es sein das ich eine andere Gimp-Version brauch? Bei mir kommen bei fast allen Befehlen die ich eingebe irgendwelche Fehlermeldungen.
    Ich hab 2.4

  4. http://www.gimpusers.de/tutorials/skript-fu-einfuehrung.html Tue Aug 18 15:55:42 2009 mralmani, 18. Aug 2009 15:55

    Bei mir kommt bei:
    (gimp-message "Hier spricht GIMP!")
    Keine Box sondern steht nur unten am Rand die Nachricht.

  5. http://www.gimpusers.de/tutorials/skript-fu-einfuehrung.html Sat Nov 7 11:50:08 2009 Naubaddi, 07. Nov 2009 11:50

    Hi, nach der Eingabe von (gimp-message "Hier spricht GIMP!") erscheint (#t) im Konsole-Fenster, bei "durchsuchen" ist die Funktion vorhanden.

    Benutze Gimp 2.6

    Gruß, Hermann

  6. http://www.gimpusers.de/tutorials/skript-fu-einfuehrung.html Wed Feb 17 20:07:32 2010 chrispa, 17. Feb 2010 20:07

    Hallo,
    habe die Gimp_Version 2.6. Bei allen Anwendungen mit einem Script-Fu (z.B. Glas-Script) kommen Fehlermeldungen. Kann das Glas-Script nicht anwenden!
    Danke- chrispa

Registrierte Benutzer können sich (rechts oben) anmelden und ihren geschützten Profilnamen verwenden, um Kommentare zu schreiben, sich bei Antworten benachrichtigen zu lassen und Bilder (z.B. ihre Version eines Effekts) an die Antworten anzuhängen.

Sind Sie Mensch oder Maschine?

Adobe® Photoshop® ist ein eingetragenes Warenzeichen der Adobe Systems, Inc. Linux ist ein Warenzeichen von Linus Torvalds. Ubuntu und Canonical sind eingetragene Warenzeichen der Canonical Ltd. | Uhrzeiten werden als CET / CEST angegeben | Impressum / Datenschutz | betrieben von bitfire it services (Mitglied der Echoplus ARGE)