| 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 |
Auf zum Endspurt. Nun kann uns nichts mehr aufhalten. Den Rest schaffen wir schon.
Der Stand des jetzigen Scriptes ist mehr so la-la, um eine Text-Box zu erzeugen. Doch wir wollen noch zwei Features draufgeben:
Um den Anwender die Möglichkeit zu geben, um den Text einen entsprechenden Freiraum zu bilden, stellen wir einen neuen Eingabe-Parameter in unserer Funktion und in der Registration bereit:
(define (script-fu-text-box inText inFont inFontSize inTextColor inBufferAmount)
(let*
; Definition unserer lokalen Variablen
; Erzeugen des neuen Bildes
(theImageWidth 10)
(theImageHeight 10)
(theImage (car (gimp-image-new theImageWidth theImageHeigth RGB) ) )
(theText)
(theBuffer)
; create a new layer for the image:
(theLayer (car (gimp-layer-new theImage theImageWidth theImageHeight RGB_IMAGE "Ebene 1" 100 NORMAL) ) )
)
...
)
(script-fu-register
"script-fu-text-box"
"<Toolbox>/Xtns/Script-Fu/Test/Text Box..."
"Creates a simple text box, sized to fir araound the user's choice of text, font, font size, and color."
"Michael Terry"
"copyright 1997, MIchael Terry"
"October 27, 1997"
""
SF-STRING "Text:" "Text Box"
SF-FONT "Font:" "-*-Roostheavy-*-r-*-*-24-*-*-*-p-*-*-*"
SF-VALUE "Font size:" "45"
SF-COLOR "Color:" '(0 0 0)
SF-VALUE "Buffer amount (0 - 100% height of text):" "35"
Wir werden an zwei verschieden Stellen Programmcode hinzufügen, den ersten Teil vor der Anpassung der Bildgröße und den zweiten Teil am Script-Ende (Rückgabe des neuen Bildes, der Ebene (layer) und des Textes).
Nachdem wir die Text-Höhe und -Breite bestimmt haben, werden wir die Größe des Randbereiches, den der Anwender festgelegt hat, zur Bildgröße hinzufügen. Dabei unterlassen wir es den Eingabewert auf einen zulässigen Wert zu kontrollieren (0 - 100%). Es ist durchaus zulässig, daß der Anwender einen Wert von "200" als Randbereich eingibt.
(set! theBuffer (* theImageHeight (/ inBufferAmount 100) ) )
(set! theImageHeight (+ theImageHeight theBuffer theBuffer) )
(set! theImageWidth (+ theImageWidth theBuffer theBuffer) )
Alles was hier geschieht ist nur die Addition der doppelten Randgröße zur Bildgröße (rechter und linker Rand bzw. oberer und unterer Rand).
Nachdem wir das Bild entsprechend vergrößert haben, müssen wir nur noch den Text zentrieren. Das geschieht durch die Verschiebung der (x,y)-Koordinaten der Randwerte (theBuffer, theBuffer). Die Addition erfolgt nach der Größenanpassung der Ebene in des Bildes:
(gimp-layer-set-offsets theText theBuffer theBuffer)
Gehen wir weiter, sichern das Script und aktualisieren die GIMP-Datenbasis. Danach sollte nach Aufruf der "Text Box"-Funktion folgendes Bild liefern.
![]() |
Und so sieht die dazugehörige Ebenenstruktur aus: | ![]() |
Als krönenden Abschluß brauchen wir nur noch geeignete Werte zurückgeben, die da sind: das Bild, die Ebene und den Text. Nach der Anzeige des Bildes fügen wir nur noch diese Zeile hinzu:
(list theImage theLayer theText)
Das ist die einzige Zeile, die notwendig ist, um unser Script in anderen Scripten einzusetzen. Dort ist dann folgende Zeile zu kodieren:
(set! theResult (script-fu-text-box "Etwas Text" "Futura_Poster" 30 '(0 0 0) 35) )
(gimp-image-flatten (car theResult) )
Uff! Herzlichen Glückwunsch! An dieser Stelle wird in der englischsprachigen Vorlage vom Michael Terry der Schwarze Gürtel zu Script-Fu in Aussicht gestellt. Ich kann dem nicht widersprechen.
Jetzt fehlen nur noch ein paar abschließende Bemerkungen, die auf der nächsten Seite folgen werden.
| 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 |