Експортування зображень за допомогою 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 normalos.execute
would block other lua codes from happening.