stampare immagini etichettate
Il primo esempio ci ha mostrato i rudimenti di lua e ci ha permesso di verificare che tutto funzionasse. Facciamo adesso qualcosa di leggermente più complesso. Proviamo a stampare una lista di immagini che hanno allegata un’etichetta “rossa”. Ma, innanzitutto, cos’è un’immagine?
local darktable = require "darktable"
local debug = require "darktable.debug"
print(darktable.debug.dump(darktable.database[1]))
Lanciare il codice qui sopra produrrà un sacco di output. Ci guarderemo fra un attimo, ma prima guardiamo al codice stesso.
Sappiamo già riguardo a require darktable
. Qui abbiamo bisogno di richiamare separatamente require darktable.debug
che è un’importante sezione delle API che fornisce funzioni d’aiuto a debuggare gli script lua.
darktable.database
è una tabella fornita dalle API che contiene tutte le immagini nella libreria. Ciascun elemento nel database è un oggetto immagine. Gli oggetti Image sono oggetti complessi che ti permettono di manipolare la tua immagine in varie maniera (tutte documentate nella sezione types_dt_lua_image_t
del manuale API). Per mostrare le tue immagini, usiamo darktable.debug.dump
che è una funzione che prende qualsiasi cosa come suo parametro e ricorsivamente fa il dump del suo contenuto. Siccome le immagini sono oggetti complessi che indirettamente referenziano altri oggetti complessi, l’output risultante è massivo. Qui sotto un estratto di esempio dell’output.
toplevel (userdata,dt_lua_image_t) : /images/100.JPG
publisher (string) : ""
path (string) : "/images"
move (function)
exif_aperture (number) : 2.7999999523163
rights (string) : ""
make_group_leader (function)
exif_crop (number) : 0
duplicate_index (number) : 0
is_raw (boolean) : false
exif_iso (number) : 200
is_ldr (boolean) : true
rating (number) : 1
description (string) : ""
red (boolean) : false
get_tags (function)
duplicate (function)
creator (string) : ""
latitude (nil)
blue (boolean) : false
exif_datetime_taken (string) : "2014:04:27 14:10:27"
exif_maker (string) : "Panasonic"
drop_cache (function)
title (string) : ""
reset (function)
create_style (function)
apply_style (function)
film (userdata,dt_lua_film_t) : /images
1 (userdata,dt_lua_image_t): .toplevel
[......]
exif_exposure (number) : 0.0062500000931323
exif_lens (string) : ""
detach_tag (function): toplevel.film.2.detach_tag
exif_focal_length (number) : 4.5
get_group_members (function): toplevel.film.2.get_group_members
id (number) : 1
group_with (function): toplevel.film.2.group_with
delete (function): toplevel.film.2.delete
purple (boolean) : false
is_hdr (boolean) : false
exif_model (string) : "DMC-FZ200"
green (boolean) : false
yellow (boolean) : false
longitude (nil)
filename (string) : "100.JPG"
width (number) : 945
attach_tag (function): toplevel.film.2.attach_tag
exif_focus_distance (number) : 0
height (number) : 648
local_copy (boolean) : false
copy (function): toplevel.film.2.copy
group_leader (userdata,dt_lua_image_t): .toplevel
Come possiamo vedere, un’immagine ha un gran numero di campi che forniscono qualsiasi sorta di informazione sull’immagine. Qui siamo interessati all’etichetta “rosso”. Questo campo è un booleano, e la documentazione ci dice che può essere scritto. Ora abbiamo solo bisogno di trovare tutte le immagini con quel campo e di stamparle:
darktable = require "darktable"
for _,v in ipairs(darktable.database) do
if v.red then
print(tostring(v))
end
end
Questo codice dovrebbe essere abbastanza semplice da capire a questo punto, ma contiene alcuni aspetti interessanti di lua che valgono la pena di essere evidenziati:
-
ipairs
è una funzione standard lua che itera attraverso tutti gli indici numerici di una tabella. La usiamo qui perché il database di darktable ha indici non numerici che sono funzioni per manipolare il database stesso (aggiungendo o rimuovendo immagini, per esempio). -
Iterare attraverso una tabella restituirà sia la chiave che il valore usato. E’ convenzione in lua di usare una variable nominata “
_
” per contenere valori che non ci interessano. -
Notare che qui usiamo la funzione lua standard
tostring
, e non quella specifica di darktabledarktable.debug.dump
. La funzione standard restituirà il nome per un oggetto mentre la funzione di debug stamperà il suo contenuto. La funzione di debug potrebbe essere prolissa qui. Ancora una volta, è un ottimo strumento di debug ma non dovrebbe essere usato per nient’altro.
translations
- English: printing labeled images
- Français: Impression d'images étiquetées
- German: Markierte Bilder drucken
- Español: impresión de imágenes etiquetadas
- Polish: drukowanie oznakowanych zdjęć
- Português: imprimir imagens com etiqueta
- Ukrainian: Друк зображень із міткою
- Dutch: gelabelde afbeeldingen afdrukken