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 ao scp 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. O os.execute normal bloquearia outros códigos lua de serem executados.

translations