PDA

Vollständige Version anzeigen : mit gimp 2.4 auf der shell bilder bearbeiten


becke
20.01.2008, 21:54
Hallo,

normalerweise bin ich im debianforum unterwegs, aber jetzt dachte ich, ich frage mal besser die Spezialisten :-)

Ich habe folgendes Verständnisproblem welches sich auch bislang nicht durch intensives googlen erhellen ließ:

Ich möchte eine handvoll Bilder auf der shell in einem Rutsch (oder zumindest erstmal eines, den "Rutsch" baue ich mir dann selber) in SW-Bilder umwandeln, und das ausdrücklich mit Gimp2.4 (nicht mit imagemagick/convert, wie das geht ist mir klar)

Ich möchte hierfür im Prinzip folgenden Menü-Befehl verwenden:
Farben -> Entsättigen -> Helligkeit

Der Befehl (oder das Modul?) lautet vermutlich original: gimp-desatuarate-full

Leider gelingt es mir nicht Gimp auf der shell die entsprechenden Parameter zu übergeben. Ich bekomme nur (für mich nichtssagende) Fehlermeldungen, wie z.B bei diesen Testscript hier:

Code: $ gimp -i -b '(simple-unsharp-mask "bild.png" 5.0 0.5 0)' -b '(gimp-quit 0)'
Kein Interpreter angegeben, es wird der Standardinterpreter »plug-in-script-fu-eval« verwendet.
batch command: experienced an execution error.

Kann mich ein Wissender bitte mal auf die richtige Bahn schicken?

Danke und Gruß,
Becke

Hans
20.01.2008, 22:42
[hans@rosi ~]$ gimp --help
Aufruf:
gimp [OPTION...] [DATEI|URI...]

GNU Image Manipulation Program

Hilfeoptionen
-?, --help Hilfeoptionen anzeigen
--help-all Alle Hilfeoptionen anzeigen
--help-gtk GTK+-Optionen anzeigen

Anwendungsoptionen
-v, --version Versionsinformationen anzeigen und Programm beenden
--license Lizenzinformationen anzeigen und Programm beenden
--verbose Ausführlicher verhalten
-n, --new-instance Eine neue GIMP-Instanz starten
-a, --as-new Bilder als neu öffnen
-i, --no-interface Ohne Benutzeroberfläche starten
-d, --no-data Keine Pinsel, Muster, Farbverläufe usw. laden
-f, --no-fonts Keine Schriften laden
-s, --no-splash Kein Startfenster anzeigen
--no-shm Keinen gemeinsam genutzten Speicher zwischen GIMP und den Modulen verwenden
--no-cpu-accel Keine speziellen Prozessorbeschleunigungen verwenden
--session=<name> Ein alternatives Sitzungsprofil verwenden
-g, --gimprc=<filename> Ein alternatives Benutzerprofil verwenden
--system-gimprc=<filename> Ein alternatives Systemprofil verwenden
-b, --batch=<command> Auszuführender Stapelbefehl (kann mehrfach verwendet werden)
--batch-interpreter=<proc> Die Prozedur zum Abarbeiten von Befehlsabfolgen
-c, --console-messages Warnungen auf der Kommandozeile anstatt in einem Dialogfensters ausgeben
--pdb-compat-mode=<mode> PDB-Kompatibilitätsmodus (off|on|warn)
--stack-trace-mode=<mode> Fehlersuche beim Absturz (never|query|always)
--debug-handlers Aktiviert Fehlersuchroutinen für nicht-schwerwiegende Signale
--g-fatal-warnings Alle Warnungen als kritisch einstufen
--dump-gimprc Eine gimprc-Datei mit den Standardeinstellungen ausgeben
--display=ANZEIGE X-Anzeige, die verwendet werden soll

Ich denke die Optionen --batch und --no-interface sollten weiterhelfen

becke
20.01.2008, 23:46
Hallo Hans,

vielen Dank für die Antwort.

Das wußte ich schon, aber wie genau kann ich einen Befehl (Modul? Filter?) auf beispielsweise bild.png anwenden?

Wo finde ich heraus welche Optionen der entsprechende Filter erwartet oder ermöglicht?

Wie kann ich also ganz konkret gimp-desatuarate-full auf bild.png anwenden?

Was mir fehlt ist eher der grundlegende Aufbau einer solchen Befehlszeile...

Gruß,
Becke

houz
21.01.2008, 01:16
Ich habe das mal analog zu http://www.gimp.org/tutorials/Basic_Batch/ versucht. Rausgekommen ist
(define (simple-grayscale filename)
(let* ((image (car (gimp-file-load RUN-NONINTERACTIVE filename filename)))
(drawable (car (gimp-image-get-active-layer image))))
(gimp-image-convert-grayscale image)
(gimp-file-save RUN-NONINTERACTIVE image drawable filename filename)
(gimp-image-delete image)))
und
gimp -i -b '(simple-grayscale "foo.jpg")' -b '(gimp-quit 0)'
Eventuell könnte man das auch ohne das Script machen und alles in der Shell angeben, aber so kannst du zumindest mal anfangen.

becke
21.01.2008, 10:17
Vielen Dank, das werde ich mir anschauen! :)

Gruß,
Becke

becke
21.01.2008, 23:49
Hallo houz,

dank deiner Hilfe kam ich ein riesiges Stück voran.
Ich konnte die Funktion verwenden:


entsaettigen.scm:
(define (entsaettigen infile outfile desaturate-mode)
(let* ((image (car (gimp-file-load RUN-NONINTERACTIVE infile infile)))
(drawable (car (gimp-image-get-active-layer image))))
(gimp-desaturate-full drawable desaturate-mode)
(gimp-file-save RUN-NONINTERACTIVE image drawable outfile outfile)
(gimp-image-delete image)))$ gimp -i -b '(entsaettigen "infile.tif" "outfile.tif" 0)' -b '(gimp-quit 0)'Oder als autonomes shell-script:

#!/bin/bash

gimp -i -b '(define (testfunktion infile outfile desaturate-mode)(let* ((image (car (gimp-file-load RUN-NONINTERACTIVE infile infile)))(drawable (car (gimp-image-get-active-layer image))))(gimp-desaturate-full drawable desaturate-mode)(gimp-file-save RUN-NONINTERACTIVE image drawable outfile outfile)(gimp-image-delete image))) (testfunktion "infile.tif" "outfile.tif" 2)' -b '(gimp-quit 0)'Jetzt kann ich mich auf die Feinheiten konzentrieren ;)

Gruß,
Becke