Müssen Sie erstmal anhalten und Luft holen? Nein? Na gut, dann lassen Sie uns mit der vierten Lektion fortfahren - Ihrem ersten Skript-Fu-Skript.
Eine der häufigsten Operationen, die ich in GIMP durchführe, ist das Erstellen einer Box mit Text für eine Webseite, ein Logo oder was auch immer. Allerdings weiß man nie genau, wie groß das anfängliche Bild sein muss, denn man weiß nicht, wieviel Platz der Text bei der gewünschten Schriftart und -größe benötigen wird.
Der Skript-Fu-Meister (und auch der Schüler) wird schnell bemerken, dass dieses Problem mit Skript-Fu leicht gelöst und automatisiert werden kann.
Wir werden daher ein Skript namens „Text Box“ erstellen, welches ein Bild in genau der Größe erstellt, so dass eine Textzeile, die der Benutzer eingibt, bequem hineinpasst. Wir werden außerdem den Benutzer die Schrift, die Schriftgröße und die Textfarbe auswählen lassen.
Bis jetzt haben wir in der Skript-Fu-Konsole gearbeitet, aber jetzt gehen wir dazu über, Skripte in Form von Textdateien zu bearbeiten.
Wo Sie Ihre Skripte speichern bleibt Ihnen überlassen - wenn Sie Zugriff auf GIMPs systemweites Skriptverzeichnis haben, können Sie Ihre Skripte dort platzieren. Ich bevorzuge es allerdings, meine persönlichen Skripte in meinem eigenen Skriptverzeichnis zu haben, getrennt von den vorinstallierten Skripten.
Im Verzeichnis .gimp-2.4
, das
GIMP in Ihrem persönlichen Verzeichnis erstellt,
sollten Sie einen Ordner namens scripts
finden.
GIMP sucht automatisch in Ihrem
.gimp-2.4
-Verzeichnis nach einem
Skriptverzeichnis und fügt die dort gefundenen Skripte zur
Skript-Fu-Datenbank hinzu. Sie sollten also Ihre Skripte dort
speichern.
Jedes Skript-Fu-Skript definiert mindestens eine Funktion, die Hauptfunktion des Skripts. Das ist der Ort, wo Sie arbeiten müssen.
Jedes Skript muss sich auch bei der Prozedurendatenbank registrieren, so dass Sie von GIMP aus darauf zugreifen können.
Wir definieren zuerst die Hauptfunktion:
(define (script-fu-text-box inText inFont inFontSize inTextColor))
Hier haben wir eine neue Funktion namens
script-fu-text-box
mit vier Parametern definiert, die
später einem Text, einer Schriftart, der Schriftgröße und der
Textfarbe entsprechen. Die Funktion ist jetzt noch leer und macht
daher überhaupt nichts. So weit, so gut - nichts Neues, nichts
Außergewöhnliches.
Schemes Namenskonventionen scheinen kleingeschriebene Namen mit Bindestrichen zu bevorzugen, dem bin ich beim Funktionsnamen gefolgt. Allerdings bin ich bei den Parametern von dieser Konvention abgewichen. Ich bevorzuge für meine Parameter und Variablen beschreibende (sprechende) Namen und habe daher den Parametern die Vorsilbe „in“ vorangestellt, so dass ich sofort erkennen kann, dass sie Eingabewerte fürs Skript enthalten und nicht innerhalb des Skriptes erzeugt wurden. Für letztere verwende ich die Vorsilbe „the“.
Es ist GIMPs Konvention, die Skriptfunktionen „script-fu-irgendwas“ zu nennen, da sie dann, wenn sie in der Datenbank für Prozeduren aufgelistet werden, alle unter „script-fu“ erscheinen. Das hilft auch, sie von Plugins zu unterscheiden.
Nun wollen wir die Funktion bei GIMP registrieren.
Das wird durch Aufrufen der Funktion script-fu-register
getan. Wenn GIMP ein Skript einliest, führt es
diese Funktion aus, die das Skript bei der der Prozedurendatenbank
registriert. Sie können diese Funktion irgendwo innerhalb des
Skripts platzieren, ich stelle sie ganz ans Ende, hinter meinen
anderen Code.
Hier ist das Programmlisting, um die Funktion zu registrieren (ich erkläre alle Parameter in einer Minute):
(script-fu-register "script-fu-text-box" ;func name "Text Box" ;menu label "Creates a simple text box, sized to fit\ around the user's choice of text,\ font, font size, and color." ;description "Michael Terry" ;author "copyright 1997, Michael Terry" ;copyright notice "October 27, 1997" ;date created "" ;image type that the script works on SF-STRING "Text:" "Text Box" ;a string variable SF-FONT "Font:" "Charter" ;a font variable SF-ADJUSTMENT "Font size" '(50 1 1000 1 10 0 1) ;a spin-button SF-COLOR "Color:" '(0 0 0) ;color variable ) (script-fu-menu-register "script-fu-text-box" "<Toolbox>/Xtns/Script-Fu/Text")
Wenn Sie diese Funktionen in einer Textdatei mit Dateiendung
.scm
in Ihrem Skriptverzeichnis speichern
und dann
→ →
wählen, wird dieses neue Skript als
→ → →
erscheinen.
Rufen Sie dieses neue Skript auf, macht es natürlich gar nichts, aber Sie können die Eingabeaufforderungen sehen, die Sie mit dem Registrieren erstellt haben (mehr darüber, was wir eigentlich gemacht haben, folgt gleich).
Zum guter Letzt: wenn Sie den Prozeduren-Browser aufrufen (
→ ), werden Sie feststellen, dass unser Skript jetzt in der Datenbank auftaucht.
Um das Skript bei GIMP zu registrieren, rufen wir
die Funktion script-fu-register
auf, geben die sieben
erforderlichen Parameter an und fügen unsere eigenen Parameter noch
hinzu, jeweils mit Beschreibung und Standardwert.
Die erforderlichen Parameter
Der Name der von uns definierten
Funktion. Das ist die Funktion, die beim Aufruf unseres Skripts
ausgeführt wird (der Eintrittspunkt in unser Skript). Das ist
deshalb notwendig, weil wir innerhalb derselben Datei weitere
Funktionen definieren können und GIMP wissen
muss, welche von diesen Funktionen es aufrufen muss. In unserem
Beispiel haben wir nur eine Funktion definiert,
script-fu-text-box
, die wir gerade registriert haben.
Die Position in dem Menü, wo das Skript eingefügt wird. Die exakte Position des Skripts wird wie ein Pfad in Unix angegeben, wobei das Wurzelelement entweder „<Toolbox>“ oder „<Image>“ ist.
Wenn Ihr Skript nicht auf einem existierenden Bild arbeitet (und daher ein neues Bild erzeugt, so wie unser Skript es tut), dann werden Sie es im Werkzeugmenü („toolbox“) einfügen wollen - das ist das Menü in GIMPs Hauptfenster (wo sich alle Werkzeuge befinden: die Auswahlwerkzeuge, das Vergrößerungsglas und so weiter).
Wenn Ihr Skript auf einem zu editierenden Bild arbeitet, werden Sie es in dem Menü einfügen wollen, das bei einem Rechtsklick auf das geöffnete Bild erscheint. Der Rest des Pfades zeigt auf die Menüliste, Menüs und Untermenüs. Daher haben wir unser Textbox-Skript im Text-Menü des Skript-Fu-Menüs des Extras-Menüs des Werkzeugkastens registriert:
→ → → .Vielleicht haben Sie es bemerkt, das Untermenü „Text“ im Skript-Fu-Menü war noch gar nicht vorhanden, als wir anfingen - GIMP erstellt automatisch alle noch nicht existierenden Menüs.
Eine Beschreibung Ihres Skripts, die dann im Prozeduren-Browser erscheint.
Ihr Name (Autor des Skripts).
Copyright-Information.
Das Datum, an dem das Skript erstellt oder zuletzt überarbeitet wurde.
Der Typ des Bildes, auf dem das Skript arbeitet. Das kann einer der folgenden Typen sein: RGB, RGBA, GRAY, GRAYA, INDEXED, INDEXEDA. Oder auch überhaupt kein Typ: in unserem Fall erstellen wir ein Bild und brauchen daher auch keinen Typ zu definieren.
Nachdem wir die erforderlichen Parameter aufgelistet haben, müssen wir die Parameter aufführen, die den von unserem Skript benötigten Parametern entsprechen. Wir werden dabei auch Hinweise zu ihrem jeweiligen Typ für den Dialog, der sich beim Aufruf unseres Skripts öffnet, geben. Außerdem geben wir einen Standardwert vor.
Dieser Abschnitt des Registrierungsprozesses hat das folgende Format:
Parametertyp |
Beschreibung |
Beispiel |
---|---|---|
SF-IMAGE |
Wenn Ihr Skript auf einem geöffneten Bild operiert, sollte dieser Parameter der erste nach den zwingend erforderlichen Parametern sein. GIMP übergibt in diesem Parameter eine Referenz auf das Bild. |
3 |
SF-DRAWABLE |
Wenn Ihr Skript auf einem geöffneten Bild operiert, sollte dieser Parameter der nächste nach dem SF-IMAGE-Parameter sein. GIMP übergibt in diesem Parameter eine Referenz auf die aktive Ebene. |
17 |
SF-VALUE |
Akzeptiert Zahlen und Zeichenketten. Beachten Sie, dass Anführungszeichen im Standardtext maskiert werden müssen, nehmen Sie also besser SF-STRING. |
42 |
SF-STRING |
Akzeptiert Zeichenketten. |
|
SF-COLOR |
Zeigt an, dass dieser Parameter eine Farbe erfordert. |
'(0 102 255) |
SF-TOGGLE |
Ein Kontrollkästchen für einen Booleschen Wert wird angezeigt. |
TRUE oder FALSE (wahr oder falsch) |
Anmerkung | |
---|---|
Neben den hier aufgeführten Parametertypen gibt es weitere für den
interaktiven Modus, die jeweils ein Widget im Dialogfenster erzeugen.
Sie finden die Beschreibung dieser Parameter mit Beispielen in dem
Testskript
|