exportar imagens com lua
Até agora, aprendemos a usar o lua para adaptar o darktable 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 darktable.
No próximo exemplo, usaremos o lua para exportar via scp
. Aparecerá um novo tipo de armazenamento na interface do usuário do darktable que exportará as imagens para um alvo remoto por meio do mecanismo de cópia em ssh
.
darktable = require “darktable”
darktable.preferences.register(“scp_export”,“export_path”,
“string”,“caminho SCP alvo”,
“Complete o caminho para o qual copiar. Pode incluir usuário e nome de máquina”,“”)
darktable.register_storage(“scp_export”,“Exportar 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)
O darktable.preferences.register
adicionará uma nova configuração no menu de preferências do darktable, 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 darktable.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 darktable.
Este código funcionará, mas tem algumas limitações. Afinal, isto é apenas um exemplo simples:
-
Usamos preferências para configurar um caminho de destino. Seria melhor adicionar um elemento à interface do usuário no darktable. Detalharemos como fazer isso na próxima seção.
-
Não verificamos o valor de retorno de
scp
. Este comando pode falhar, em particular se o usuário não tiver configurado a preferência corretamente. -
Este script não pode ler a entrada do usuário. O
scp
remoto deve usar uma cópia sem senha – não se pode fornecer uma senha aoscp
facilmente, assim nós o deixamos deste jeito. -
Não há nenhuma mensagem exibida uma vez que o script tenha terminado, somente a barra de progresso na parte inferior esquerda diz ao usuário que o trabalho está completo.
-
Usamos
coroutine.yield
para chamar um programa externo. Oos.execute
normal bloquearia outros códigos lua de serem executados.