Експортування зображень за допомогою Lua

Дотепер ми навчилися використовувати Lua для адаптації Darktable до нашого конкретного робочого процесу. Давайте зараз розглянемо, як за допомогою Lua легко експортувати зображення в онлайн-сервіс. Якщо ви можете завантажити зображення в цей сервіс через командний рядок, ви можете використовувати Lua для інтеграції цього в інтерфейс користувача Darktable.

У цьому наступному прикладі ми будемо використовувати Lua для експорту через scp. У інтерфейсі користувача Darktable з’явиться новий тип сховища, який експортуватиме зображення до віддаленої цілі за допомогою механізму копіювання в 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 – це виклик, який фактично реєструє новий тип сховища. Перший аргумент – це ім’я типу сховища, другий – мітка, яка відображатиметься в інтерфейсі, а останній – це функція, яка викликається на кожне зображення. Ця функція має багато параметрів, але в цьому прикладі ми використовуємо лише filename. Він містить ім’я тимчасового файлу, куди зображення було експортовано Darktable.

Цей код буде працювати, але він має кілька обмежень. Зрештою, це лише простий приклад:

  • Ми використовуємо налаштування, щоб задати цільовий шлях. Було б краще додати елемент до інтерфейсу експорту в Darktable. Ми докладно розповімо, як це зробити в наступному розділі.

  • Ми не перевіряємо повернене значення scp. Ця команда може бути невдалою, зокрема, якщо користувач неправильно встановив налаштування.

  • Цей сценарій не може прочитати введення від користувача. Віддалений scp має підтримувати безпарольне копіювання – scp не може бути легко забезпечений паролем, тому ми залишимо його таким.

  • Після закінчення нашого прикладу повідомлення не відображається, лише індикатор виконання внизу ліворуч повідомляє користувачеві, що завдання виконано.

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

translations