експортування зображень за допомогою 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 додасть нове налаштування до меню налаштувань darktable, scp_export та export_path дозволять нам однозначно визначити наші уподобання. Ці поля використовуються повторно, коли ми читаємо значення налаштування. Поле string повідомляє механізму lua, що налаштування є рядком. Це також може бути ціле число, ім’я файлу або будь-який з типів, докладно описаних в посібнику API, що стосуються types_lua_pref_type. Тоді ми маємо мітку для налаштування в меню налаштувань, підказку при наведенні на значення та значення за замовчуванням.
darktable.register_storage – це виклик, який фактично реєструє новий тип сховища. Перший аргумент – це ім’я типу сховища, другий – мітка, яка відображатиметься в інтерфейсі, а останній – це функція, яка викликається на кожне зображення. Ця функція має багато параметрів, але в цьому прикладі ми використовуємо лише filename. Він містить ім’я тимчасового файлу, куди зображення було експортовано darktable.
Цей код буде працювати, але він має кілька обмежень. Зрештою, це лише простий приклад:
-
Ми використовуємо налаштування, щоб задати цільовий шлях. Було б краще додати елемент до інтерфейсу експорту в darktable. Ми докладно розповімо, як це зробити в наступному розділі.
-
Ми не перевіряємо повернене значення
scp. Ця команда може бути невдалою, зокрема, якщо користувач неправильно встановив налаштування. -
Цей сценарій не може прочитати введення від користувача. Віддалений
scpмає підтримувати безпарольне копіювання –scpне може бути легко забезпечений паролем, тому ми залишимо його таким. -
Після закінчення нашого прикладу повідомлення не відображається, лише індикатор виконання внизу ліворуч повідомляє користувачеві, що завдання виконано.
-
Ми використовуємо
coroutine.yieldдля виклику зовнішньої програми. Звичайнийos.executeзаблокує інші коди lua.