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 normale os.execute würde andere Lua Codes an der Ausführung blockieren.

Translations