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)

darktable.preferences.register will add a new preference to darktable’s preferences menu, scp_export and export_path allow us to uniquely identify our preference. These fields are reused when we read the value of the preference. The string field tells the lua engine that the preference is a string. It could also be an integer, a filename or any of the types detailed in the API manual relating to types_lua_pref_type. We then have the label for the preference in the preference menu, the tooltip when hovering over the value and a default value.

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