Photoshop-Automatisierung ohne Photoshop
Massenverarbeitung beliebiger Gammakurven auf der Kommandozeile
In der Serie "Hilferuf der Gemahlin" geht es nach den Teilen virtuelle Bildverwaltung
und Generierung von Präsentationen nun um die automatische Filterung großer Bildbestände mit alternativ
- Photoshop zzgl. Imagemagick-Verkleinerung zu großer Ausgabedateien unter Windows
- oder elegant wie effizient mit den Werkzeugen der freien Welt in den Varianten
- GIMP/Script-Fu/bash (GNU/Linux)
- Imagemagick (GNU/Linux oder Windows)
Nun sind also die wichtigsten 200 Bilder sortiert, auch Power-Point-/Impress-Präsentationen können aus beliebigen Bildkombinationen maschinell erstellt werden, aber: Präsentation derselben im Fernsehen
erfordert eine Filterung des gesamten Bildmaterials anhand der Korrektur-Ebene
- 4 Gammakurven für Helligkeit und jede Farbkomponente
einer vom Sender vorgegebenen Photoshop-Datei im *.psb-Format.
Dazu ergeben sich 3 Lösungen
- Automatisierung mit Photoshop
- eher auch für Endanwender, aber selbst im marktführenden kommerziellen Programm nicht ohne Fallstricke und "shortcomings"
- im hauseigenen *.psd/*.psb-Format entstehen sehr große Dateien, welche in einem Batch-Nachlauf mit convert/mogrify aus der Imagemagick-Suite zusätlich zu verkleinern sind
- Diese Variante erfordert Rechenaufwand mit allen Abfolgen einer GUI-Aufzeichnung und ist die langsamte aller hier vorgestellten
- Dabei ist egal, ob für die Automatisierung die Abfolge Aktion => Stapelverarbeitung (mächtiger, aber komplexer) oder der Bildprozessor (eingechränkte Funktion, aber schneller
und mit einfacher JPEG-Speicherung) genutzt werden
- Automatisierung mit GIMP/Script-Fu und bash
- Nachbildung der Photoshop-Gammakurven als 4 Splines mit Stützpunkten
- Speicherung der Stützpunkte als setting unter color => curves ...
- Erstellen eines Script-Fu für Filterung und JPEG-Export eines Bildes anhand ebendieser Splines
- bash-Wrapper zur Batch-Verarbeitung mit GIMP/Script-Fu
- Diese Variante ist als echte Kommandozeilen-Automatisierung ceteris paribus deutlich schneller, erfordert jedoch gegenüber der folgenden immer noch Rechenaufwand je Bild-Filterung
und Kurven-Stützpunkte müssen aus Photoshop nach GIMP von Hand übertragen werden.
- Im Batch-Betrieb auf beliebigem (Büro-/Klein-)Rechner/Server keine Photoshop-Lizenz und keine Nutzeroberfläche notwendig
- Automatisierung mit Imagemagick und bash
- an Einfachheit, Perfektion und Geschwindigkeit vermutlich nicht zu übertreffen
- Exakter Quasi-Export der Gammakurven aus Photoshop in wenigen Sekunden
- impliziter Beibehalt aller Qualitäts- und Kompressionsvorgaben zu filternder Dateien
- extrem hohe Verarbeitungsgeschwindigkeit bei minimalen Ressourcenanforderungen (auf Raspberry lauffähig)
- alle Gammakurven werden nur einmalig VOR der Massenverarbeitung berechnet und während des Batches als reine Lookup-Table verwendet
- auf schwachen Rechnern etwa 30, auf Büro-Kleinrechnern jedoch bereits 60 bis > 100 Bilder/Minute
- auch unter Windows umsetzbar
- Im Batch-Betrieb auf beliebigem (Büro-/Klein-)Rechner/Server keine Photoshop-Lizenz und keine Nutzeroberfläche notwendig
Vergleichsvariante: Automatisierung mit Photoshop
Vorgehen (hier am Beispiel Aktion => Stapelverarbeitung; Verfahren über Aktion => Bildprozessor ähnlich)
- Extraktion der interessierenden Korrekturebene in eine Datei Template.psd
- Laden von Template.psd als erste Datei
- Laden einer beliebigen Bilddatei als zweite Datei
- Erstellen einer Aktionsfolge Alt-F9 (cf. Schritte im Aktionspanel des folgenden Screenshots)
- Kopiere Korrekturebene aus vorherigem Bild (== Template.psd)
- Füge Korrekturebene in Folgebild (== zweite Datei) ein
- Speichere und schließe die zweite Datei
Wichtig dabei
- Aktionen werden per Makrorecorder aufgezeichnet und können sich nur relativ auf "vorheriges" und "folgendes" Bild beziehen.
- Speichern und Schließen müssen Teil der Aktion, nicht der folgenden Stapelverarbeitungsklammer sein, da
- Menübefehle nicht aufgezeichnet, sondern explizit in die Makrofolge eingebaut werden müssen, im besonderen auch keine Aktionen nach Aufruf eines Menüs
aufgezeichnet werden, damit auch Speichern und Exportieren nicht/nur schwer möglich sind
- im Unterschied zur expliziten Verdrahtung von Menüaufrufen können Tastaturkommandos Ctrl-C => Ctrl-V problemlos aufgezeichnet werden
- Für die Stapelverarbeitungsklammer im folgenden Schritt muss zu Beginn der Aktion immer genau und nur Template.osd geladen sein, um genau hieraus die
Korrekturebene für das via Stapelverarbeitung jeweils nachgeladene, zu verarbeitende Bild mit Ctrl-C => Ctrl-V einzufügen; daher ist das aktive Bild auch
durch die Aktion und nicht die Stapelverarbeitung zu schließen.
- Erstellen einer Stapelverarbeitung (Datei => Automatisieren => Stapelverarbeitung) als Klammer um die vorige Aktion für alle Dateien eines Verzeichnisses
- Großer Nachteil: Wie auch die zur Extraktion der Filterebene verwandte Eingangsdatei sind *.psd/*.psb-Dateien als einzig automatisierbares Batch-Ausgabeformat viele MByte groß
- Die vom Sender vorgegebene Eingangsdatei bestand zu 39.5 MByte aus einem Bild und nur zu 0.5 MByte aus der eigentlich nur nötigen Filterebene.
- Ein gefiltertes JPEG-Bild von 1 MByte wurde als PSD-Ausgabe 40 MByte groß.
Daher müssen alle im Batch gespeicherten PSD-Dateien im Nachgang mit Imagemagick zu JPEG konvertiert und verkleinert werden. Dabei enstehen automatisch 2 Dateien
- Datei-0.jpg (das gefilterte JPEG-Bild) und
- Datei-1.jpg (das ungefilterte JPEG-Bild, welches ebenfalls unveränderlich Teil der PSD-Datei wurde
Der alternative Bildprozessor ermöglicht bei eingeschränktem Funktionsumfang eine einfach(er)e Bedienung und direkte JPEG-Speicherung, erfordert keine zuvor gespeicherten Aktionen, jedoch
ebenfalls eine geöffnete Photoshop-Instanz, da lediglich GUI-Abläufe auf viele Bilder sequentiell angewandt werden, nur klicken muss man nicht (selbst).
Aktion erstellen ...
Stapelverarbeitung konfigurieren ...
Automatisierung mit GIMP/Script-Fu und bash
Natürlich lässt sich z.B. die Gamma-Filterung unter GNU/Linux wesentlich stringenter und flexiber ganz ohne GUI und Makroabläufe als echter Batch automatisieren, zumal Einstellungen dort in guter Tradition als reine Textdateien vorliegen und alle Komponenten
mit bash als Klammer hervorragend scriptbar sind. Das betagte Script-Fu spielt hier seine ganze Scheme-Urgestein-Verlässlichkeit gegenüber einem Pyhton-Fu aus, welches im
Umbruch zwischen GIMP 2.10 und Pyhton 3 aktuell unter GNU/Linux zwar moderner sein mag, aber aktuell gar nicht verfügbar ist.
Vorgehen
- Zunächst greifen wir in Photoshop in der Korrekturebene alle 10 Pixel (auf der x-Achse) ein Koordinatenpaar für die 4 Gammakurven ab und erhalten (255/10)*4 = 100
Koordinatenpaare (cf. erste Abbildung oben).
- Mit diesen Stützpunkten erstellen wir in GIMP unter colors => curves ... die entsprechenden 4 Kurven und speichern diese als setting mycurve

- Wie unter GNU/Linux selbstverständlich, liegen diese Settings als einfach editierbare ASCII-Textdatei unter ~/.config/GIMP/2.10/curves/mycurve vor.

- Als nächstes erstellen wir in ~/.config/GIMP/2.10/scripts/mycurves.scm ein eigenes Script-Fu-Script mit einer
Funktion drawableCurvesSpline, welche eine Bilddatei lädt, über die aus ~/.config/GIMP/2.10/curves/mycurve kopierten Stützstellen die 4 benötigten Gammakurven erstellt,
auf das Bild anwendet und dieses in der gewünschten Qualität als JPEG speichert/exportiert. Dabei ist zu beachten, dass die Helligkeitskurve (value) tunlichst nach
den Kurven der 3 Spektralfarben angewandt wird !
Die Parameter für die GIMP-Funktionen gimp-drawable-curves-spline und file-jpeg-save erhalten wir aus dem Prozedurenbrowser der
Script-Fu-Konsole Filter => Script-Fu-Console
- Zuletzt erzeugen wir mit bash eine Aufrufschleife der eben erstellten Script-Fu-Funktion über die Bilder eines Verzeichnisses
Automatisierung mit Imagemagick und bash
Diese Variante halte ich für die Bestmögliche
- Beliebige Kurven können in Sekunden aus Photoshop einmalig perfekt exportiert werden.
- Batch-Verarbeitung großer Bildmengen wird unter Linux leicht(est)gewichtig mit Imagemagick und Bash durchgeführt.
- Die Verarbeitungsgeschwindikgeit auch auf Kleinstrechnern ist durch Reduktion auf Lookup-Tables extrem hoch
- z.B. auch problemlos als ssh-Sitzung auf einem Raspberry Pi
- Die Lösung kann (zur Not ;-) sogar unter Windows leicht umgesetzt werden
Vorgehen
- in Photoshop
- Laden (jeweils alternativ)
- der Ebene mit den Gammakurven aus eigenem Template oder
- des Presets in Colors => Curves ... oder
- des zuvor gespeicherten Settings in Colors => Curves ...

- Erstellen 3er perfekter Farbkeile mit Imagemagick und bash (folgend am Beispiel "rot")
- Cave: Nicht via convert -size 256x1 gradient:red -rotate 90 rotkeil_unecht.png, sondern via bash-Script
- Prüfung mit convert rotkeil_unecht.png rotkeil_unecht.txt zeigt im ersten Fall, dass ein "unechter" Keil "weiß nach rot" erzeugt wird, an welchem auch der Blau- und Grün-Kanal beteiligt sind.
- Wir benötigen jedoch einen "reinen" "schwarz nach rot"-Keil (256 Pixel lang und 1 Pixel hoch), welchen wir mit einem bash-Script generieren
- Vergleich des "unechten" und "echten" Rot-Farbkeiles

- Cave: Farbkeile müssen als *.png vorliegen, da JPEG-Kompression zu sprunghaften Änderungen im Farbkeil sorgt
- cf. hierzu convert rotkeil_sprunghaft.jpg rotkeil_sprunghaft.txt

- Filterung der 3 png-Farbkeile mit der gewünschten Kurveneinstellung in Photoshop und PNG-Schnellexport ("Save Gamma" anhaken)
- Dabei wird jedes Farbkeil-Bild genau und nur mit jeweils 2 der 4 Kurven gefiltert, nämlich derjenigen des einzig vorhandenen Farbkanales und der Helligkeitskurve
- Diese beiden Filterungen gehorchen dem Kommutativ- und Assoziativgesetz. Die jeweils anderen beiden Farbkanäle sind nicht betroffen.
Mit den hierüber erzeugten Lookup-Tables ist nun die Massenfilterung großer Bildbestände mit einem bash- oder DOS-Script und Imagemagick in extrem hoher
Geschwindigkeit sowohl unter GNU/Linux als auch Windows ganz ohne Photoshop möglich.
Hierbei ergibt die Kombination der 3 Lookup-Tabellen aus jeweils Farbkanal und Helligkeitskurve mit Imagemagick dasselbe Ergebnis wie eine Filterung in Photoshop

Detail-Fragen zur konkreten Umsetzung gerne an den Autor unter heinz punkt breinlinger at web punkt de
Impressum und Datenschutzerklärung