Експортування зображень за допомогою 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.