Bilder mit Lua exportieren
Bis jetzt haben wir gelernt Lua dazu zu nutzen, um darktable an unseren Arbeitsablauf anzupassen. Nun möchten wir schauen, wie wir Lua dazu nutzen, um Bilder einfach an einen Online Service zu exportieren. Wenn du Bilder via die Kommandozeile an einen Bilder-Service hochladen kannst, dann kannst Lua dazu nutzen, um das in die Schnittstelle von darktable zu integrieren.
In diesem nächsten Beispiel verwenden wir Lua, um über scp
zu exportieren. Ein neuer Speicher erscheint in der Benutzeroberfläche von darktable, welcher Bilder über den Kopiermechanismus von ssh
an ein entferntes Ziel exportiert.
darktable = require "darktable"
darktable.preferences.register("scp_export","export_path",
"string","target SCP path",
"Complete path to copy to. Can include user and hostname","")
darktable.register_storage("scp_export","Export via scp",
function( storage, image, format, filename,
number, total, high_quality, extra_data)
if not darktable.control.execute("scp "..filename.." "..
darktable.preferences.read("scp_export",
"export_path","string")) then
darktable.print_error("scp failed for "..tostring(image))
end
end)
darktable.preferences.register
wird eine neue Präferenz in darktables Präferenzen-Menü hinzufügen; scp_export
und export_path
erlauben es uns unsere Präferenz genau zu definieren. Diese Felder werden wieder gebraucht, wenn wir den Wert der Präferenz lesen. Das Feld string
sagt dem Lua-Programm, dass die Präferenz ein String ist. Es könnte auch ein Integer sein, ein Dateiname oder irgendeiner der Typen, die im API Handbuch zu types_lua_pref_type
detailliert sind. Dann haben wir das Label für die Präferenz im Menü Präferenz, den Cursor beim Darüberfahren über den Wert und den Standard Wert.
darktable.register_storage
ist der Aufruf, der wirklich einen neuen Speichertypen registriert. Das erste Argument ist ein Name für den Speicher Typ, das zweite ist das Label, das in der UI angezeigt wird und das letzte ist eine Funktion jedes Bild aufzurufen. Diese Funktion hat viele Parameter, aber filename
ist der einzige, den wir für dieses Beispiel nutzen. Es beinhaltet den Namen einer temporären Datei, wohin das Bild mit darktable exportiert wurde.
Dieser Code wird funktionieren, aber er hat sehr viele Nachteile. Das ist eben nur ein einfaches Beispiel:
-
Wir nutzen Präferenzen, um den Zielpfad zu konfigurieren. Es wäre besser ein Element hinzuzufügen, um den Export UI in darktable. Wie das gemacht wird, werden wir im nächsten Abschnitt detaillieren.
-
Wir überprüfen den returnierten Wert von
scp
. Dieses Kommando könnte nicht funktionieren, insbesondere, wenn der Nutzer die Präferenz nicht korrekt gesetzt hat. -
Dieses Skript kann den Input des Nutzers nicht lesen. Das remote
scp
muss passwort-leere Kopien nutzen.scp
können nicht leicht mit einem Passwort versehen werden, also lassen wir es dabei bewenden. -
Es wird keine Meldung gezeigt, wenn das Beispiel einmal durchgeführt ist, nur der Fortschrittsbalken unten links zeigt an, dass der Job fertig ist.
-
Wir nutzen
coroutine.yield
, um ein externes Programm aufzurufen. Das normaleos.execute
würde andere Lua Codes an der Ausführung blockieren.