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 normale os.execute zou andere lua-codes blokkeren.

translations