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 will add a new preference to darktable’s preferences menu, scp_export and export_path allow us to uniquely identify our preference. These fields are reused when we read the value of the preference. The string field tells the lua engine that the preference is a string. It could also be an integer, a filename or any of the types detailed in the API manual relating to types_lua_pref_type. We then have the label for the preference in the preference menu, the tooltip when hovering over the value and a default value.

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