### 3.4. Ihr erstes Fu-Skript

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.

#### 3.4.1. Ein Textbox-Skript erstellen

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.

This problem can be solved and automated with Script-Fu.

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.

#### 3.4.2. Ihre Skripte bearbeiten und speichern

Up until now, we've been working in the Script-Fu Console. Now, however, we're going to switch to editing script files. Script files should be plain text files that you can edit in a text or code editor. The name you give is not that important, except for being able to recognize the script. You should give your script file the extension „.scm“.

Where you place your scripts is a matter of preference. In GIMP's folder preferences you can see in which folders GIMP looks for scripts. It is also possible to add a new folder there. The folder where GIMP stores its own scripts is usually not the best choice for your scripts, but for the rest feel free to choose what suits you best.

#### 3.4.3. Das Allernötigste

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.

#### 3.4.4. Namenskonventionen

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.

#### 3.4.5. Die Funktion registrieren

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 übrigen 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"                        ;function 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;\
          2009, the GIMP Documentation Team"        ;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" "<Image>/Filters/Tutorial")

Save these functions in a text file with a `.scm` suffix in a subdirectory of your script directory, with the same name as your script file, then restart GIMP. The new script will appear as Filters → Tutorial → Text Box.

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 (Hilfe → Prozeduren-Browser), werden Sie feststellen, dass unser Skript jetzt in der Datenbank auftaucht.

#### 3.4.6. Skriptregistrierung Schritt für Schritt

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.

- The menu label is the name that will be shown in the menu. To specify the location, see Abschnitt 3.4.9, „Registering the Menu Location“.

- 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.

#### 3.4.7. Die Skriptparameter registrieren

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-STRING` | Akzeptiert Zeichenketten. | "Irgendein Text"
`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)

#### 3.4.8. Das Skript-Fu-Parameter-API[5]

| Anmerkung
Beside the above parameter types there are more types for the interactive mode, each of them will create a widget in the control dialog. You will find a list of these parameters with descriptions and examples in the test script `plug-ins/script-fu/scripts/test-sphere-v3.scm` shipped with the GIMP source code.

Parametertyp | Beschreibung
--- | ---
`SF-ADJUSTMENT` | Erzeugt ein Auswahlfeld. SF-ADJUSTMENT "bezeichnung" '(wert min max schrittweite sprungweite stellen typ) Liste der Widgetargumente
Element | Beschreibung
--- | ---
"bezeichnung" | Text vor dem Widget.
wert | Vorgegebener Anfangswert.
min/max | Kleinst- bzw. größtmöglicher Wert (zulässiger Wertebereich).
schrittweite | Erhöhen/Vermindern um diesen Wert.
sprungweite | Erhöhen/Vermindern mit BildAuf-/BildAb-Taste.
stellen | Anzahl der Nachkommastellen.
typ | SF-SLIDER bzw. 0 oder SF-SPINNER bzw. 1
`SF-COLOR` | Erzeugt einen Farbauswahlschalter im Dialog. SF-COLOR "bezeichnung" '(rot grün blau) oder SF-COLOR "bezeichnung" "farbe" Liste der Widgetargumente
Element | Beschreibung
--- | ---
"bezeichnung" | Text vor dem Widget.
'(rot grün blau) | Liste der Werte für die rote, grüne und blaue Farbkomponente.
"farbe" | Farbname in CSS-Notation.
`SF-FONT` | Erzeugt einen Schriftauswahldialog und gibt den Schriftnamen als String zurück. Es gibt zwei gimp-text-Prozeduren, die die Verwendung dieses Rückgabewertes erleichtern: (gimp-text-fontname image drawable x-pos y-pos text border antialias size unit font) (gimp-text-get-extents-fontname text size unit font) wobei `font` der Name des zurückgegebenen Zeichensatzes ist. Die im Namen des Zeichensatzes enthaltene Schriftgröße wird ignoriert. Sie wird nur im Auswahldialog verwendet. Sie sollten also einen vernünftigen Wert wählen, etwa 24 Pixel. SF-FONT "bezeichnung" "zeichensatz" Liste der Widgetargumente
Element | Beschreibung
--- | ---
"bezeichnung" | Text vor dem Widget.
"zeichensatz" | Name des voreingestellten Zeichensatzes.
`SF-BRUSH` | Erstellt eine Pinselauswahl mit der Ansicht des Pinsels (die beim Anklicken eine vergrößerte Vorschau zeigt) und einen Schalter, der ein Dialogfenster zum Suchen und Modifizieren von Pinseln öffnet. SF-BRUSH "Pinsel" '("Circle (03)" 100 44 0) In diesem Beispiel startet der Pinseldialog mit dem vorgegebenen Pinsel »Circle (03)«, Deckkraft 100, Abstand 44 und Modus »Normal« (0). Wenn diese Auswahl nicht geändert wird, würde der Funktion folgender Wert als Argument übergeben werden: `'("Circle (03)" 100 44 0)`.
`SF-PATTERN` | Erstellt eine Musterauswahl mit der Ansicht des Musters (die beim Anklicken eine vergrößerte Vorschau zeigt) und einen Schalter, der ein Dialogfenster zur Auswahl eines Musters öffnet. SF-PATTERN "Muster" "Maple Leaves" Wenn diese Auswahl nicht geändert wird, würde der Name des Musters als String zurückgegeben werden: "Maple Leaves".
`SF-GRADIENT` | Erzeugt einen Schalter, der den aktuellen Farbverlauf als Vorschau enthält. Wird dieser Schalter gedrückt, öffnet sich ein Dialogfenster zur Auswahl eines Farbverlaufs. SF-GRADIENT "Farbverlauf" "Deep Sea" Wenn diese Auswahl nicht geändert wird, würde der Name des Farbverlaufs als String zurückgegeben werden: "Deep Sea".
`SF-PALETTE` | Erzeugt einen Schalter, der die aktuellen Palette enthält. Wird dieser Schalter gedrückt, öffnet sich ein Dialogfenster zur Auswahl einer Palette. SF-PALETTE "Palette" "Named Colors" Wenn diese Auswahl nicht geändert wird, würde der Name der Palette als String zurückgegeben werden: "Named Colors".
`SF-FILENAME` | Erzeugt einen Schalter mit dem Namen einer Datei. Wird dieser Schalter gedrückt, öffnet sich ein Dialogfenster zur Auswahl einer Datei. SF-FILENAME "bezeichnung" (string-append "" gimp-data-directory "/scripts/beavis.jpg") Der zurückgegeben Wert ist der Name der Datei als String.
`SF-DIRNAME` | Ähnlich wie SF-FILENAME, nur dass hier ein Verzeichnis anstelle einer Datei ausgewählt werden kann. SF-DIRNAME "bezeichnung" "/var/tmp/images" Der zurückgegeben Wert ist der Name des Ordners als String.
`SF-OPTION` | Erzeugt ein Auswahlfeld mit den als Liste übergebenen Werten. Die erste Option ist die Voreinstellung. SF-OPTION "bezeichnung" '("option1" "option2") Der Rückgabewert des Skripts ist die Nummer der gewählten Option. Die erste Option hat die Nummer 0.
`SF-ENUM` | Erzeugt ein Auswahlfeld, das alle Aufzählungswerte des angegebenen Typs anzeigt. Der Typ muss ein registrierter Aufzählungstyp ohne das Präfix »Gimp« sein. Der zweite Parameter ist der Vorgabewert als symbolischer Name. SF-ENUM "Interpolation" '("Interpolationstyp" "linear") Der Rückgabewert des Skripts entspricht dem gewählten Wert.

#### 3.4.9. Registering the Menu Location

Once we have registered our script, we need to tell GIMP where it should be found in the menu.

The best menu location of your script depends on its function. Most scripts are found in the Filters and Colors menus.

For the current script, which creates a new image, we choose a submenu of Filters → Tutorial. This is what the line with the `script-fu-menu-register` function does. Thus, we registered our Text Box script here: Filters → Tutorial → Text Box.

Any submenu that you specify in your script that doesn't exist yet will be automatically created by GIMP.

[5] Dieser Abschnitt ist nicht Teil des ursprünglichen Tutorials.

3.3. Listen, Listen und noch mehr Listen |  | 3.5. Adding Additional Functionality

Report a bug in GIMP Report a documentation error