Tot nu toe hebben we geleerd lua te gebruiken om Ansel 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 Ansel.

In dit volgende voorbeeld zullen we lua gebruiken om te exporteren via scp. Een nieuw opslagtype zal verschijnen in de gebruikersinterface van Ansel die afbeeldingen naar een extern doel zal exporteren via het kopieermechanisme in ssh.

 1Ansel = require "Ansel"
 2
 3Ansel.preferences.register("scp_export","export_path",
 4  "string","target SCP path",
 5  "Complete path to copy to. Can include user and hostname","")
 6
 7Ansel.register_storage("scp_export","Export via scp",
 8  function( storage, image, format, filename,
 9     number, total, high_quality, extra_data)
10    if not Ansel.control.execute("scp "..filename.." "..
11      Ansel.preferences.read("scp_export",
12         "export_path","string")) then
13      Ansel.print_error("scp failed for "..tostring(image))
14    end
15end)

Ansel.preferences.register zal een nieuwe voorkeur toevoegen aan het voorkeurenmenu van Ansel, 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.

Ansel.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 Ansel is geëxporteerd.

Deze code werkt, maar heeft een aantal beperkingen. Dit is tenslotte maar een simpel voorbeeld:

  • We use preferences to configure the target path. It would be nicer to add an element to the export UI in Ansel. We will detail how to do that in the next section.

  • We do not check the returned value of scp. That command might fail, in particular if the user has not correctly set the preference.

  • This script can’t read input from the user. The remote scp must use password-less copy – scp can’t be provided with a password easily, so we will leave it that way.

  • There is no message displayed once the example is done, only the progress bar on the lower left side tells the user that the job is complete.

  • We use coroutine.yield to call an external program. The normal os.execute would block other lua codes from happening.