Bilder mit GIMP aufbereiten


Was will ich?

In der Regel wähle ich als Kalenderbilder Ausschnitte aus vorhandenen Bildern aus. Die Original-Bilder liegen in einem Verzeichnis, die ausgewählten Ausschnitte speichere ich in einem anderen Verzeichnis. Ohne ein Skript ist diese einfache Aufgabe ziemlich umständlich. Leider bietet Script-Fu nur sehr eingeschränkte Funktionalität. Im Grunde bietet Script-Fu nur die Möglichkeit, ein Bild zu laden, zu bearbeiten und zu speichern. Die Werkzeug-Einstellungen, das Menü, Tastenkombinationen oder konfigurierte Pfade lassen sich mit Script-Fu nicht einstellen, nicht einmal lesen. Interaktive Eingaben lassen sich nicht als Script-Fu-Script aufzeichnen. Oder Script-Fu ist nicht so dokumentiert, dass ich es verstehe. Man muss wohl für viele praktische Arbeiten ein Plug-in in C schreiben.

Der Ablauf soll folgendermaßen sein:

Ich wähle zunächst mit einer Tastenkombination das Verzeichnis der Original-Bilder und das Verzeichnis der Bildausschnitte.
Mit einer zweiten Tastenkombination lade ich das erste Original-Bild.
Ich markiere einen Bildausschnitt.
Mit der zweiten Tastenkombination speichere ich den markierten Bildausschnitt und lade das nächste Bild, falls es ein weiteres Bild gibt.

Ich kann den Arbeitsablauf immer unterbrechen, GIMP beenden und den Rechner ausschalten. Später kann ich wieder GIMP starten und mit der zweiten Tastenkombination die Arbeit fortsetzen. Oder ich kann mit der ersten Tastenkombination mit anderen Verzeichnissen neu beginnen.

Wo finde ich Hilfe zu Script-Fu?

Script-Fu benutzt die Programmiersprache Scheme. Eine Einführung in Scheme ist https://www.scheme.com/tspl4/. Zu der Implementierung TinyScheme gibt es eine knappe Anleitung. TinyScheme implementiert einen Teil des nicht mehr neuen Standards R5RS. Script-Fu erweitert TinyScheme um einige Prozeduren. Bei Unklarheiten kann die Dokumentation zu MIT/GNU Scheme helfen. Das GIMP-Handbuch enthält eine kurze Einführung in Script-Fu.

Hallo Welt!

Scripte für GIMP schreibe ich mit einem Text-Editor unabhängig von GIMP. Der Menüpunkt Bearbeiten → Einstellungen öffnet das Fenster Einstellungen. Dort zeigt der Menüpunkt Ordner → Skripte eine Liste der Verzeichnisse, in denen GIMP Script-Fu-Skripte sucht. Bei mir sind die Verzeichnisse /home/herbaer/.gimp-2.8/scripts und /usr/share/gimp/2.0/scripts eingestellt. Die Scheme-Dateien mit der Namensendung .scm in diesen Verzeichnnissen werden beim Start von GIMP automatisch geladen.

Ich erstelle für einen ersten Test die Datei hello.scm im Verzeichnis /home/herbaer/.gimp-2.8/scripts:

(gimp-message-set-handler CONSOLE)
(gimp-message "Hallo Welt!")
  

Ich starte GIMP aus der Konsole. So kann ich die Meldung lesen. Tatsächlich lese ich in der Konsole die letzte Zeile script-fu-Warnung: Hallo Welt!.

Ich wähle in GIMP den Menüpunkt Filter+Skript-Fu → Skripte auffrischen. In der Konsole erscheint die neue Zeile Skripte auffrischen-Warnung: Hallo Welt!.

Ich erweitere die Datei hello.scm folgendermaßen:

(define (de-herbaer-hello)
  (gimp-message-set-handler CONSOLE)
  (gimp-message _"Hallo Welt!")
  )
  

Der Unterstrich _ vor der Zeichenkette soll anzeigen, dass der Text abhängig von der Sprach-Einstellung ist. Ich weiß leider nicht, wie die Lokalisierung von GIMP funktioniert. Ich lade die GIMP-Skripte neu (Menüpunkt Filter → Skript-Fu → Skripte auffrischen), öffne über den Menüpunkt Filter → Skript-Fu → Konsole die Skript-Fu-Konsole und gebe dort ein: (de-herbaer-hello). In der Konsole, aus der ich GIMP gestartet habe, lese ich die Zeile Konsole-Warnung: Hallo Welt!. Die Prozedur de-herbaer-hello ist also verfügbar, auch wenn sie nicht im Prozeduren-Browser (Schaltfläche Durchsuchen ... in der Skrip-Fu-Konsole oder Menüpunkt Hilfe → Prozeduren-Browser) erscheint.

Eine Tastenkombination zuordnen

Nun will ich diese Prozedur an eine Tastenkombination binden. Dazu muss ich sie erst in der GIMP-Prozedur-Datenbank registrieren. Die dazu nötige Prozedur script-fu-register ist selbst nicht in der Prozedur-Datenbank registriert, aber im Benutzerhandbuch beschrieben.

Ich folge hier der Konvention, dass die Namen aller Skript-Fu-Prozeduren, die in der GIMP-Prozedur-Datenbank registriert sind, mit script-fu- beginnen. Zusammen mit meinem persönlichen Präfix ergibt sich das Präfix script-fu-de-herbaer-. Das Skript sieht jetzt so aus:

(define (script-fu-de-herbaer-hello)
  (gimp-message-set-handler CONSOLE)
  (gimp-message _"Hallo Welt!")
  )

(script-fu-register
 "script-fu-de-herbaer-hello"        ; Prozedur-Name
 _"Hallo Welt"                       ; Menueintrag
 _"Freundlicher Gruß"                ; Beschreibung
 "Herbert Schiemann"                 ; Autor
 "(C) 2019 Herbert Schiemann, GPL"   ; Copyright-Notiz
 "2019-01-31"                        ; Datum
 ""                                  ;
 )
  

Das GIMP-Benutzerhandbuch wird hin und wieder geändert. In manchen Versionen des Handbuches steht, dass als zweiter Parameter (hier _"Hallo Welt") ein kompletter Menüpfad, beginnend mit <Image>, anzugeben ist. Das ist wohl falsch.

Ich start GIMP neu. Jetzt erscheint die Prozedur script-fu-de-herbaer-hello im Prozeduren-Browser. Der Menüpunkt Bearbeiten → Tastenkombinationen öffnet das Fenster „Tastenkombinationen konfigurieren”. Unter dem Baumeintrag Plugins erscheint eine Aktion mit dem Menünamen Hallo Welt und dem (Prozedur-)Namen script-fu-de-herbaer-hello. Ich markiere diese Zeile, drücke die Tastenkombination Ctrl+Alt+H und schließe das Fenster „Tastenkombinationen konfigurieren”. Ich drücke die Tastenkombination Ctrl+Alt+H. In der Konsole, aus der ich GIMP gestartet habe, erscheint die Zeile

Hallo Welt-Warnung: Hallo Welt!

Ich beende GIMP. Die Datei /home/herbaer/.gimp-2.8/menurc enthält die Zeile

(gtk_accel_path "<Actions>/plug-in/script-fu-de-herbaer-hello" "<Primary><Alt>h")
  

Einen Menüeintrag zuordnen

Die Prozedur script-fu-menu-register, ordnet unserer Prozedur script-fu-de-herbaer-hello einen Menüeintrag zu. Sie wird nicht im Prozeduren-Browser angezeigt. Unser Script hello.scm sieht jetzt so aus:

(define (script-fu-de-herbaer-hello)
  (gimp-message-set-handler CONSOLE)
  (gimp-message _"Hallo Welt!")
  )

(script-fu-register
 "script-fu-de-herbaer-hello"        ; Prozedur-Name
 _"Hallo Welt"                       ; Menueintrag
 _"Freundlicher Gruß"                ; Beschreibung
 "Herbert Schiemann"                 ; Autor
 "(C) 2019 Herbert Schiemann, GPL"   ; Copyright-Notiz
 "2019-01-31"                        ; Datum
 ""                                  ;
 )

(script-fu-menu-register "script-fu-de-herbaer-hello" "<Image>/_Help/Ausprobieren")

Der erste Parameter von script-fu-menu-register ist der Name unserer Prozedur, der zweite Parameter benennt das Menü oder Untermenü, in dem der Menüeintrag unserer Prozedur (Hallo Welt) eingetragen wird. Das Untermenü wird wie ein Dateipfad angegeben. Die Wurzel des "Menüpfads" ist <Image>. Der Unterstrich am Anfang des nächsten Pfadeintrags _Help zeigt an, dass der Eintrag von der eingestellten Sprache abhängt. Alle Untermenüs werden nach Bedarf erzeugt. Nachdem die Skripte neu geladen sind, finde ich im Menü des GIMP-Hauptfensters den Menüpunkt Hilfe → Ausprobieren → Hallo Welt. Neben dem Namen Hallo Welt des Menüeintrags ist die Tastenkombination angegeben (Strg+Alt+H). Ich führe den Mauszeiger auf diesen Menüeintrag, und in der Info-Zeile des Hauptfensters erscheint die Kurzbeschreibung Freundlicher Gruß. Ich wähle den Menüeintrag, und in der Konsole, aus der ich GIMP gestartet habe, erscheint die Zeile

Hallo Welt-Warnung: Hallo Welt!

Ich probiere andere Menüpfade:

im Scriptim GIMP-Menü

<Image>

Hallo Welt

Der Menüeintrag steht direkt in der Menüzeile. Ein Doppelklick startet die Prozedur, bei anderen Menüpfaden genügt ein einfacher Klick.

<Image>/_FileDatei → Hallo Welt
<Image>/_File/Versuch/_FileDatei → Versuch → File → Hallo Welt
<Image>/_EditBearbeiten → Hallo Welt
<Image>/_SelectAuswahl → Hallo Welt
<Image>/_ViewAnsicht → Hallo Welt
<Image>/_ImageBild → Hallo Welt
<Image>/_LayerEbene → Hallo Welt
<Image>/_ColorsFarben → Hallo Welt
<Image>/_ToolsWerkzeuge → Hallo Welt
<Image>/_FiltersFilter → Hallo Welt
<Image>/_WindowsFenster → Hallo Welt
<Image>/_Filters/_Script-FuFilter → Script-Fu → Hallo Welt

Namenskonventionen

Die nicht-lokalen Namen, die ich definiere, beginnen in der Regel mit dem Präfix de-herbaer-, abgeleitet von meiner Internet-Domain.

Die Namen von Scheme-Prozeduren, die in der Prozedur-Datenbank eingetragen werden, beginnen mit script-fu-de-herbaer-.

Die „echten” Skripte

Nach dieser Vorbereitung gehe ich an die oben gestellte Aufgabe. Ich verteile sie auf zwei Skript-Dateien: process-dir.scm (Quelle) enthält die Prozedur für den Durchlauf über alle Dateien des Verzeichnisses, select-dir.scm (Quelle) enthält die Prozedur für die Verarbeitung einer einzelnen Datei, hier also den markierten Ausschnitt speichern und zusätzlich dessen Koordinaten ausgeben.

GIMP 2.10

Es ist Zeit vergangen. Debian 10 beinhaltet GIMP 2.10. Ich habe keine Verbesserung gegenüber GIMP 2.8 feststellen können, aber es sieht anders aus. Zur Konfiguration der Oberfläche helfen wahrscheinlich die Merseburger Zaubersprüche am besten.

Als nicht-privilegierter Anwender kann ich die Pfade offenbar nicht über die graphische Oberfläche einstellen. Das Skript-Verzeichnis ist ~/.config/GIMP/2.10/scripts. In dieses Verzeichnis kopiere ich die beiden Dateien process-dir.scm (Quelle) und select-dir.scm (Quelle) und starte GIMP neu. Im Dialogfenster „Bearbeiten → Einstellungen” aktiviere ich die Option „Oberfläche → Tastenkombination beim Beenden speichern” und beende GIMP. Die Datei ~/.config/GIMP/2.10/menurc enthält jetzt die Zeile

; (gtk_accel_path "<Actions>/plug-in/script-fu-de-herbaer-process-dir" "")

Ich ersetze sie durch

(gtk_accel_path "<Actions>/plug-in/script-fu-de-herbaer-process-dir" "<Primary><Alt>w")

Nach dem nächsten Start von GIMP erscheint neben dem Menüpunkt „Filter → Verzeichnis → weiter” der Hinweis „Strg+Alt+W”. Die Tastenkombination funktioniert auch. Im Dialogfenster „Bearbeiten → Einstellungen” deaktiviere ich zur Sicherheit die Option „Oberfläche → Tastenkombination beim Beenden speichern”.

Mehr

ImageMagick ist zur automatischen Bildbearbeitun besser geeignet ist als GIMP. Das Skript selection-dir.scm (Quelle) erstellt Dateien mit der Position rechteckiger Bildausschnitte. Das Skript selinfo-dir.scm (Quelle) erstellt Dateien mit der Position und der Größe und weiteren Daten (Farbinformation, Hinweise zur Drehung) rechteckiger Bildausschnitte. Andere Software kann die Daten der Bildausschnitte lesen und die Bilder entsprechend bearbeiten.