imprimir imagens com etiqueta
O primeiro exemplo nos mostrou os conceitos básicos de Lua e permitiu que nos certificássemos de que tudo está funcionando corretamente. Agora vamos fazer algo um pouco mais complexo. Vamos tentar imprimir uma lista de imagens que possuam a etiqueta “vermelho” adicionada. Mas primeiramente o que é uma imagem?
local darktable = require “darktable”
local debug = require “darktable.debug”
print(darktable.debug.dump(darktable.database[1]))
Executar o código acima produzirá uma grande quantidade de resultados. Vamos dar uma olhada nesses resultados daqui a pouco, mas primeiro vejamos o código em si.
Já sabemos sobre require darktable
. Aqui, precisamos require darktable.debug
em separado, que é uma seção opcional da API que fornece funções auxiliares para ajudar a depurar scripts lua.
O darktable.database
é uma tabela fornecida pela API que contém todas as imagens da base de dados da biblioteca. Cada entrada na base de dados é um objeto de imagem. Objetos de imagem são objetos complexos que permitem que você manipule sua imagem de diversos modos (todos eles documentados na seção types_dt_lua_image_t
do manual da API). Para exibir nossas imagens, usamos o darktable.debug.dump
, que é uma função que recebe qualquer coisa como parâmetro e devolve recursivamente seu conteúdo. Uma vez que as imagens são objetos complexos que indiretamente referenciam outros objetos complexos, a saída resultante é imensa. Abaixo é mostrado um exemplo reduzido da saída.
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
Como podemos ver, uma imagem possui um grande número de campos que fornece todo tipo de informação sobre ela. Aqui, estamos interessados na etiqueta “vermelho”. Este campo é booleano e a documentação nos informa que pode ser editado. Nós agora apenas precisamos encontrar todas as imagens com este campo e imprimi-las:
darktable = require “darktable”
for _,v in ipairs(darktable.database) do
if v.vermelho then
print(tostring(v))
end
end
Este código deveria ser simples de entender neste ponto, mas contém alguns aspectos interessantes de lua que merecem destaque.
-
ipairs
é uma função padrão lua que itera por todos os índices numéricos de uma tabela. Nós a usamos aqui porque a base de dados do darktable tem índices não numéricos que são funções para manipular a própria base de dados (adicionar ou remover imagens, por exemplo). -
Iterar por uma tabela retornará tanto a chave como o valor usados. É convencional em lua usar uma variável de nome “
_
” para armazenar valores com os quais não nos importamos. -
Note que usamos a função padrão lua
tostring
aqui e não a função específica do darktable chamadadarktable.debug.dump
. A função padrão retornará um nome para o objeto enquanto a função de depuração (debug) mostrará o conteúdo dele. A função de depuração seria prolixa demais aqui. Novamente, é uma ótima ferramenta para depuração, mas não deveria ser usada para nada além disso.
translations
- English: printing labeled images
- Français: Impression d'images étiquetées
- German: Markierte Bilder drucken
- Español: impresión de imágenes etiquetadas
- Italian: stampare immagini etichettate
- Polish: drukowanie oznakowanych zdjęć
- Ukrainian: Друк зображень із міткою
- Dutch: gelabelde afbeeldingen afdrukken