Hasta ahora hemos aprendido a usar lua para adaptar Ansel a nuestro flujo de trabajo particular. Veamos ahora cómo usar lua para exportar imágenes fácilmente a un servicio en línea. Si puede cargar una imagen en un servicio a través de la línea de comando, puede usar lua para integrar esto en la interfaz de usuario de Ansel.
En el siguiente ejemplo usaremos lua para exportar vía scp
. Aparecerá un nuevo tipo de almacenamiento en la interfaz de usuario de Ansel que exportará imágenes a un objetivo remoto a través del mecanismo de copia en 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
agregará una nueva preferencia al menú de preferencias de Ansel, scp_export
y export_path
nos permiten identificar de manera única nuestra preferencia. Estos campos se reutilizan cuando leemos el valor de la preferencia. El campo string
le dice al motor lua que la preferencia es una cadena. También podría ser un número entero, un nombre de archivo o cualquiera de los tipos detallados en el manual de la API relacionado con types_lua_pref_type
. Luego tenemos la etiqueta para la preferencia en el menú de preferencias, la información sobre herramientas al pasar el cursor sobre el valor y un valor predeterminado.
Ansel.register_storage
es la llamada que realmente registra un nuevo tipo de almacenamiento. El primer argumento es un nombre para el tipo de almacenamiento, el segundo es la etiqueta que se mostrará en la interfaz de usuario y el último es una función para llamar a cada imagen. Esta función tiene muchos parámetros, pero filename
es el único que usamos en este ejemplo. Contiene el nombre de un archivo temporal donde la imagen fue exportada por el motor de Ansel.
Este código funcionará pero tiene un par de limitaciones. Después de todo, este es solo un ejemplo simple:
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.