exportar imágenes con lua

Hasta ahora hemos aprendido a usar lua para adaptar darktable 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 darktable.

En el siguiente ejemplo usaremos lua para exportar vía scp. Aparecerá un nuevo tipo de almacenamiento en la interfaz de usuario de darktable que exportará imágenes a un objetivo remoto a través del mecanismo de copia en ssh.

darktable = require "darktable"

darktable.preferences.register("scp_export","export_path",
  "string","target SCP path",
  "Complete path to copy to. Can include user and hostname","")

darktable.register_storage("scp_export","Export 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.

darktable.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 darktable.

Este código funcionará pero tiene un par de limitaciones. Después de todo, este es solo un ejemplo simple:

  • Usamos preferencias para configurar la ruta de destino. Sería mejor agregar un elemento a la interfaz de usuario de exportación en darktable. Detallaremos cómo hacerlo en la siguiente sección.

  • No verificamos el valor devuelto de scp. Ese comando puede fallar, en particular si el usuario no ha configurado correctamente la preferencia.

  • Este script no puede leer la entrada del usuario. El scp remoto debe usar una copia sin contraseña; no se puede proporcionar una contraseña a scp fácilmente, así que lo dejaremos así.

  • No se muestra ningún mensaje una vez finalizado el ejemplo, solo la barra de progreso en la parte inferior izquierda le dice al usuario que el trabajo está completo.

  • We use darktable.control.execute to call an external program. The normal os.execute would block other lua codes from happening.

translations