Até agora, aprendemos a usar o lua para adaptar o Ansel ao nosso fluxo de trabalho em particular. Vejamos agora como usar o lua para exportar facilmente as imagens para um serviço online. Se você puder carregar uma imagem para um serviço via linha de comando, então você pode usar o lua para integrar isto à interface do usuário do Ansel.
No próximo exemplo, usaremos o lua para exportar via scp
. Aparecerá um novo tipo de armazenamento na interface do usuário do Ansel que exportará as imagens para um alvo remoto por meio do mecanismo de cópia em ssh
.
1Ansel = require “Ansel”
2
3Ansel.preferences.register(“scp_export”,“export_path”,
4 “string”,“caminho SCP alvo”,
5 “Complete o caminho para o qual copiar. Pode incluir usuário e nome de máquina”,“”)
6
7Ansel.register_storage(“scp_export”,“Exportar 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)
O Ansel.preferences.register
adicionará uma nova configuração no menu de preferências do Ansel, scp_export
e export_path
nos permitem identificar de maneira única nossa preferência. Estes campos são reutilizados quando lemos o valor da preferência. O campo string
informa ao motor do lua que a preferência é uma cadeia de texto. Poderia também ser um número inteiro, um nome de arquivo ou qualquer dos tipos detalhados no manual da API relacionado com types_lua_pref_type
. Então nós teremos o rótulo para o menu de preferência, a dica exibida quando o mouse estiver sobre o item de menu e um valor padrão.
O Ansel.register_storage
é a chamada que realmente registra o novo tipo de armazenamento. O primeiro argumento é um nome para o tipo de armazenamento, o segundo é o rótulo que será exibido na interface do usuário e o último é uma função para chamar a cada imagem. Esta função possui muitos parâmetros, mas o filename
é o único que usamos neste exemplo. Ele contém o nome de um arquivo temporário onde a imagem foi exportada pelo motor do Ansel.
Este código funcionará, mas tem algumas limitações. Afinal, isto é apenas um exemplo simples:
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.