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 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 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 use darktable.control.execute to call an external program. The normal os.execute would block other lua codes from happening.

translations