Bis jetzt haben wir gelernt Lua dazu zu nutzen, um Ansel 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 Ansel zu integrieren.
In diesem nächsten Beispiel verwenden wir Lua, um über scp
zu exportieren. Ein neuer Speicher erscheint in der Benutzeroberfläche von Ansel, welcher Bilder über den Kopiermechanismus von ssh
an ein entferntes Ziel exportiert.
1Ansel = require "Ansel"
2
3Ansel.preferences.register("scp_export","export_path",
4 "string","target SCP path",
5 "Complete path to copy to. Can include user and hostname","")
6
7Ansel.register_storage("scp_export","Export via scp",
8 function( storage, image, format, filename,
9 number, total, high_quality, extra_data)
10 if not Ansel.control.execute("scp "..filename.." "..
11 Ansel.preferences.read("scp_export",
12 "export_path","string")) then
13 Ansel.print_error("scp failed for "..tostring(image))
14 end
15end)
Ansel.preferences.register
wird eine neue Präferenz in Ansels 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.
Ansel.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 Ansel exportiert wurde.
Dieser Code wird funktionieren, aber er hat sehr viele Nachteile. Das ist eben nur ein einfaches Beispiel:
We use preferences to configure the target path. It would be nicer to add an element to the export UI in Ansel. We will detail how to do that in the next section.
We do not check the returned value of
scp
. That command might fail, in particular if the user has not correctly set the preference.This script can’t read input from the user. The remote
scp
must use password-less copy –scp
can’t be provided with a password easily, so we will leave it that way.There is no message displayed once the example is done, only the progress bar on the lower left side tells the user that the job is complete.
We use
coroutine.yield
to call an external program. The normalos.execute
would block other lua codes from happening.