| Titelblatt | Lektion 1 | Lektion 2 | Lektion 3 | Lektion 4 | Lektion 5 | Lektion 6 | Referenzen |
|---|---|---|---|---|---|---|---|
| Erster Anlauf | Variable und Funktionen | Immer wieder Listen | Das erste Gerippe | Etwas mehr Fleisch | Noch etwas Salz an die Suppe |
Nun, wenn Sie soweit sind, ich bin es. Laßt uns mit dem Kurz-Lehrgang fortfahren und unserem Script-Gerippe etwas mehr Funktionalität hinzufügen.
In der letzten Lektion habe wir gelernt, wie man eine leere Funktion anlegt und in GIMP registrieren läßt. In dieser Lektion wollen wir unserem Script mehr Funktionalität hinzufügen. Mehr Funktionalität soll bedeuten: wir erzeugen ein neues Bild und fügen den Text hinzu, den der Anwender hinzufügen will (Parametereingabe) und passen die Bildgröße diesem Text an.
Alles was man dazu braucht, wie Variable setzen, Funktionen definieren und Listenbestandteile bearbeiten, das alles hatten wir schon und Sie sollten sich noch daran erinnern können. Der Rest ist mehr oder weniger Kinderkram. Das Einzige, was man braucht, ist nur die Kenntnis der Funktionen in der Prozedur-Datenbasis von GIMP und deren Aufruf. Also los. Rufen wir den DB-Browser von GIMP auf (Toolbox->Xtns->DB Browser) und schauen uns dessen Inhalt an.
Beginnen wir mit dem Anlegen eines neuen Bildes. Dazu werden wir eine neue Variable mit dem Namen "theImage" anlegen und dieser dem Aufrufwert der GIMP-Built-in-Funktion "gimp-image-new" zuweisen:
Wie im DB-Browser zu erkennen ist, benötigt die Funktion "gimp-image-new" drei Parameter, die Bildbreite (width), die Bildhöhe (height) und den Bildtyp (type). Da wir später die Bildgröße sowieso modifizieren, erzeugen wir vorerst ein RGB-Bild (=type) in der Größe 10x10. Die Parameter der Bildgröße legen wir ebenfalls in Variablen ab, um sie später noch einmal bei der Manipulation zu verwenden.
(define (script-fu-text-box inText inFont inFontSize inTextColor)
(let*
(
; Definition unserer lokalen Variablen
; Erzeugen des neuen Bildes
(theImageWidth 10)
(thImageHeight 10)
(theImage (car (gimp-image-new theImageWidth theImageHeight RGB) ) )
; theText is die Deklaration des spaeteren Textes
(theText)
Wir haben nun ein neues Bild erzeugt und benötigen eine neue Ebene (Layer). Dazu rufen wir die Funktion "gimp-layer-new" auf, die als Eingabeparameter das gerade erzeugte Bild zugewiesen bekommt. Fahren wir also mit dem Script fort:
; Erzeugen einer neuen Ebene zum Bild
(theLayer (car (gimp-layer-new theImage theImageWidth theImageHeight RGB_IMAGE "Ebene 1" 100 NORMAL) ) )
; Ende unsere lokalen Variablen
)
Nun haben wir die neue Ebene erzeugt und fügen sie dem Bild hinzu:
(gimp-image-add-layer theImage theLayer 0)
Und nun nur so zum Spaß wollen wir uns die Früchte unserer Arbeit zu diesem Zeitpunkt ansehen und lassen uns das noch leere Bild anzeigen:
(gimp-display-new theImage)
Sichern Sie Ihre bisherige Arbeit und aktualisieren Sie die GIMP-Datenbasis mit dem neuen Script-Inhalt (Xtns->Script-Fu->Refresh). Starten Sie das Script und ein Bild erscheint (wirklich? wirklich!). Ein wenig mickrig, aber es erscheint. Es wird möglicherweise eine Zufallsfarbe enthalten, da wir den Bildinhalt nicht gelöscht haben. Wir sollten es also sofort tun.
Gehen wir weiter und entfernen die letzte Script-Zeile zum Anzeigen des Bildes oder kommentieren sie aus, indem wir ein Semikolon ";" vor dem Kommando als erstes Zeichen in der Zeile hinzufügen.
Bevor wir den Text hinzufügen, setzen wir noch die Hintergrund- (background) und die Vordergrund-Farbe (foreground), so das der Text in der vom Anwender gesetzten Farbe erscheint. Dazu verwenden die Funktionen "gimp-palette-setback/foreground":
(gimp-palette-set-background '(255 255 255) )
(gimp-palette-set-foreground inTextColor)
Nachdem die Farben korrekt zugewiesen sind, bereinigen wir einen eventuellen zufällig gesetzten Bildinhalt, indem wir alles im Bild auswählen (selektieren) und löschen (clear):
(gimp-selection-all theImage)
(gimp-edit-clear theLayer)
(gimp-selection-none theImage)
Nachdem der Bildinhalt bereinigt wurde, können wir den Text hinzufügen:
(set! theText (car (gimp-text-fontname theImage theLayer 0 0 inText 0 TRUE inFontSize PIXELS inFont)))
Diesen extrem langen Funktionsaufruf lassen Sie sich bitte auf der Zunge zergehen und schauen sich dabei die Einträge der Parameter im DB-Browser von GIMP an.
Nachdem wir den Text angelegt haben, lassen wir uns dessen Größe geben und passen unser Bild diesen Maßen an.
(set! theImageWidth (car (gimp-drawable-width theText) ) )
(set! theImageHeight (car (gimp-drawable-heigth theText) ) )
(gimp-image-resize theImage theImageWidth theImageHeight 0 0)
(gimp-layer-resize theLayer theImageWidth theImageHeight 0 0)
Um die Bildgenerierung abzuschließen, fügen wir erneut unsere bereits bekannte Anweisung zur Bildanzeige hinzu:
(gimp-display-new theImage)
Speichern Sie nun wieder Ihre Arbeit ab, aktualisieren Sie die GIMP-Datenbasis und rufen Sie die Text-Box auf. Nun sollten Sie in etwa Folgendes sehen:
Falls Sie versuchen das Bild zu schließen ohne vorher das Bild zu sichern, werden Sie von GIMP gefragt, ob Sie dies noch machen wollen, um eventuelle Veränderungen noch zu speichern. GIMP fragt Sie deshalb, weil das "dirty"-Kennzeichen (flag) gesetzt ist. In unserem Fall ist es eher lästig, da unser Bild jederzeit mit dem Script wieder hergestellt werden kann, so daß eine Bestätigung nicht unbedingt sinnvoll ist. Um dies GIMP mitzuteilen, daß eine Abfrage nicht sinnvoll ist, bereinigen wir das "dirty"-Kennzeichen, nachdem das Bild angezeigt wurde:
(gimp-image-clean-all theImage)
Damit wird der interne Zähler auf 0 gesetzt und das Bild gilt als "clean".
Ob Sie nun diese Anweisung in Ihrem Script einsetzen, hängt von verschiedenen Umständen ab. Das ist von Fall zu Fall verschieden und muß entsprechend der Funktionalität des Scriptes abgeschätzt werden.
Falls Ihr Script ein Bild bearbeitet, ist es notwendig, den Funktionsaufruf "gimp-image-disable-undo" am Script-Anfang und "gimp-image-enable-undo" am Script-Ende zu aktivieren. Diese beiden Funktione schalten die Aufzeichnung der Arbeitsaktionen ab und ein. Sollten Sie ein äußerst komplexes Script entwickelt haben, sollte der Anwender nicht unbedingt "tausende" Mal UNDO (STRG-Z) nach dem Auslösen des Scriptes drücken müssen, um alle Script-Aufgaben zurückzusetzen.
Gut. Nächste Lektion.
| Titelblatt | Lektion 1 | Lektion 2 | Lektion 3 | Lektion 4 | Lektion 5 | Lektion 6 | Referenzen |
|---|---|---|---|---|---|---|---|
| Erster Anlauf | Variable und Funktionen | Immer wieder Listen | Das erste Gerippe | Etwas mehr Fleisch | Noch etwas Salz an die Suppe |