Jusqu’à présent, nous avons appris à utiliser Lua pour adapter Ansel à notre flux de travail particulier. Voyons maintenant comment utiliser Lua pour exporter facilement des images vers un service en ligne. Si vous êtes capable de télécharger une image vers un service via la ligne de commande, vous pouvez utiliser Lua pour intégrer cela dans l’interface utilisateur de Ansel.

Dans l’exemple suivant, nous utilisons Lua pour exporter via scp. Un nouveau type de stockage apparaît dans l’interface utilisateur de Ansel qui exporte les images vers une cible distante via le mécanisme de copie de 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 ajoute une nouvelle préférence au menu des préférences de Ansel, scp_export et export_path nous permettent d’identifier de manière unique notre préférence. Ces paramètres sont utilisés lorsqu’on lit la valeur de la préférence. Le paramètre string indique au moteur Lua que la préférence est de type chaîne. Il peut également s’agir d’un entier, d’un nom de fichier ou de l’un des types détaillés dans le manuel de l’API relatif à types_lua_pref_type . On a alors le libellé de la préférence dans le menu des préférences, l’info-bulle au survol de la valeur et une valeur par défaut.

Ansel.register_storage est l’appel qui enregistre réellement le nouveau type de stockage. Le premier argument est le nom du type de stockage, le second est l’étiquette qui est affichée dans l’interface utilisateur et le dernier est une fonction à appeler sur chaque image. Cette fonction a beaucoup de paramètres, mais filename est le seul que nous utilisons dans cet exemple. Il contient le nom d’un fichier temporaire de l’image exportée par le moteur de Ansel.

Ce code fonctionne mais il a quelques limitations. Ce n’est qu’un exemple simple après tout :

  • 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.