afbeeldingen exporteren met lua
Tot nu toe hebben we geleerd lua te gebruiken om darktable aan te passen aan onze specifieke werkvolgorde. Laten we nu eens kijken hoe we lua kunnen gebruiken om eenvoudig afbeeldingen naar een online service te exporteren. Als je een afbeelding naar een service kunt uploaden via de opdrachtregel, dan kun je lua gebruiken om dit te integreren in de gebruikersinterface van darktable.
In dit volgende voorbeeld zullen we lua gebruiken om te exporteren via scp
. Een nieuw opslagtype zal verschijnen in de gebruikersinterface van darktable die afbeeldingen naar een extern doel zal exporteren via het kopieermechanisme in 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
zal een nieuwe voorkeur toevoegen aan het voorkeurenmenu van darktable, scp_export
en export_path
stellen ons in staat om onze voorkeur uniek te identificeren. Deze velden worden hergebruikt wanneer we de waarde van de voorkeur lezen. Het veld string
vertelt de lua-engine dat de voorkeur een string is. Het kan ook een geheel getal zijn, een bestandsnaam of een van de types die worden beschreven in de API-handleiding met betrekking tot types_lua_pref_type
. We hebben dan het label voor de voorkeur in het voorkeurenmenu, de tooltip als we met de muis over de waarde gaan en een standaardwaarde.
darktable.register_storage
is de aanroep die daadwerkelijk een nieuw opslagtype registreert. Het eerste argument is een naam voor het opslagtype, het tweede is het label dat in de gebruikersinterface wordt weergegeven en het laatste is een functie om elke afbeelding aan te roepen. Deze functie heeft veel parameters, maar filename
is de enige die we in dit voorbeeld gebruiken. Het bevat de naam van een tijdelijk bestand waar de afbeelding door de engine van darktable is geëxporteerd.
Deze code werkt, maar heeft een aantal beperkingen. Dit is tenslotte maar een simpel voorbeeld:
-
We gebruiken voorkeuren om het doelpad te configureren. Het zou leuker zijn om een element toe te voegen aan de export-UI in darktable. We zullen in de volgende sectie in detail beschrijven hoe je dat kan doen.
-
We controleren de geretourneerde waarde van
scp
niet. Die opdracht kan mislukken, vooral als de gebruiker de voorkeur niet correct heeft ingesteld. -
Dit script kan geen invoer van de gebruiker lezen. De remote
scp
moet een wachtwoordloze kopie gebruiken –scp
kan niet gemakkelijk worden voorzien van een wachtwoord, dus laten we het zo. -
Er wordt geen bericht weergegeven zodra het voorbeeld is voltooid, alleen de voortgangsbalk linksonder vertelt de gebruiker dat de taak is voltooid.
-
We gebruiken
coroutine.yield
om een extern programma aan te roepen. De normaleos.execute
zou andere lua-codes blokkeren.