Fino ad ora abbiamo imparato come usare lua per adattare Ansel al nostro particolare flusso di lavoro. Guardiamo ora a come usare lua per esportare facilmente le immagini verso un servizio online. Se sei in grado di caricare un’immagine verso un servizio utilizzando la linea di comando, allora puoi usare lua per integrarlo nell’interfaccia utente di Ansel.

Nel prossimo esempio useremo lua per esportare via scp. Una nuova destinazione apparire nella UI di Ansel per esportare immagini verso un obiettivo remoto usando il meccanismo di copia in ssh.

 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 aggiungerà una nuova preferenze nel menù delle preferenze di Ansel, scp_export e export_path ci permetteranno di identificare univocamente le nostre preferenze. Questi campi verranno riutilizzati quando leggeremo i valori delle preferenze. Il campo string dice al motore lua che la preferenza è una stringa. Può anche essere un intero, un nome file o qualunque dei tipi dettagliati nel manuale delle API riguardo types_lua_pref_type . Poi abbiamo l’etichetta per la preferenza nel menù delle preferenze, il tooltip quando si passa col mouse sul valore e il valore di default.

Ansel.register_storage è la chiamata che registra una nuova destinazione. Il primo argomento è il nome della destinazione, il secondo è l’etichetta che verrà mostrata nella UI e l’ultimo è la funzione da chiamare per ciascuna immagine. Questa funzione ha moti parametri, ma filename è l’unico che usiamo in questo esempio. Contiene il nome del file temporaneo dove l’immagine è stata esportata dal motore di Ansel.

Questo codice funziona ma ha un paio di limitazione. Del resto è solo un semplice esempio:

  • 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 normal os.execute would block other lua codes from happening.