Lo standard EXIF

Uno dei tanti standard, se implementato in fase di costruzione dell’hardware, che ad oggi può fornirci informazioni molto utili sulle immagini è lo standard E.X.I.F. (Exchangeable Image file Format).

Questo standard, introdotto nel lontano 1998 da un’associazione quale la JEIDA (Japan Electronic Industry Development Association) è fra le invenzioni di più utili che ci possono essere nel mondo della grafica digitale. Nella stesura delle caratteristiche di queso standard, oggi giunto alla versione 2.2, e consultabile all’indirizzo www.exif.org , si è voluto definire un metodo unico per trasportare delle ulteriori informazioni insieme con le immagini. Queste informazioni possono essere utilizzate per effettuare una stampa corretta dell’imagine, oppure un corretto ri-bilanciamento dei toni e della luminosità, oppure un buon promemoria delle condizioni di scatto e delle impostazioni della fotocamera, ecc. ecc. Insomma grazie allo standard EXIF, ad oggi possiamo scattare e stampare o trasportare senza doverci più preoccupare di conservare tutte quelle informazioni che sino a ieri erano fondamentali per una buona rielaborazione o solo per una corretta stampa.

Come funziona e cosa memorizza

L’EXIF è stato pensato per essere implementato direttamente a livello hardware, cioè le informazioni che vengono memorizzate non devono essere impostate manualmente dall’operatore bensì vengono automaticamente aggiunte dall’hardware che compone la fotocamera.Queste informazioni in realtà possono essere viste come “tag” che vengono valorizzati in conseguenza delle diverse condizioni ed impostazioni presenti al momento dello scatto.

I Tag EXIF

Per poter essere quanto più esaustivo possibile ho pensato fosse giusto aggiungere il link al file che descrive lo standard specifiche; comunque le più importanti e direttamente interessate dalla nostra curiosità, sono :

  • ImageWidth                larghezza
  • ImageLength              lunghezza

sento, a questo punto, che la vostra attenzione, nei confronti di questo standard, è ora aumentata !

Analisi, Lettura e Scrittura di tag EXIF

A questo punto mi sembra giusto parlare del perchè questo standard possa interessarci.

Mettiamo il caso di dover analizzare due immagini: una ritrae un bel primo piano di un soggetto con alle spalle un monumento famoso ed un orologio; la seconda lo stesso soggetto allo stadio che segue il derby con sullo sfondo il tabellone dei punteggi. Queste immagini vengono utilizzate dal nostro “attore” per testimoniare come una domenica sia stato dapprima turista e poi tifoso della  citta  madrina della sua squadra del cuore. …

Credo che voi siate andati già oltre l’esempio. Se la fotocamera inserisce autonomamente delle informazioni che non è possibile modificare in fase di realizzazione, questo rende probabile identificare la reale posizione del nostro soggetto in quella data ed in quell’ora.

Per quanto concerne gli strumenti utilizzabili per leggere ed in caso modificare i tag EXIF, potrei nominarne tantissimi ma vi confesso che l’unico, a mio dire, che ha superato ogni test è stato exiftool reperibile dal suo sito.

Questa utility, sviluppata in perl, permette sia a riga di comando sia drag and drop di ottenere la lettura e la valorizzazione dei tag Exif del più ampio genere d’immagini.

Di seguito elenco le possibilità oratiche offerte da Exiftool, così come si può leggere presso il sito del produttore:

Facciamo pratica

Una volta procurataci la nostra utility vediamo subito cosa può fare:

Sistema Operativo MS Windows ®

Possiamo usare direttamente Exiftool con il drag and drop, cioè trascinando un’immagine sull’icona ed attendendo che visualizzi il risultato. Avrete notato che il nome exiftool è accompagnato da un (-k), questi sono i parametri in append da dare alla utility, per una lista completa leggete quanto elencato direttamente nel sito del creatore :

I parametri sono diversi :

-a

Abilita i tag names duplicati in output, senza I duplicati sono soppresi

-b

Output richiesto in formato binario. Spesso usato per estrarre immagini.

-D

Mostra i tag ID numerici in formato decimale.

-e

Stampa I soli tag esistenti.

-ext EXT (or –ext EXT)

Elabora i soli file con estensioni specifiche, oppure usa –ext per escludere i file; ci possono essere più opzioni -ext ed –ext. Le estensioni possono iniziare con il punto ‘.’, e non sono importanti se in maiuscolo.

Esempio:

exiftool -ext .JPG * # process only JPG files

exiftool –ext crw –ext dng * # process all but CRW and DNG

exiftool –ext . * # ignore if no extension

-f

forza la stampa dei tags anche se non valorizzati.

-fast

Aumenta la velocità di estrazione


-g[NUM]

Organizza l’output per gruppi di tag. NUM specific ail numero di gruppo, può essere 0 (generico), 1 (specifico) o 2 (categoria). Se non specificato viene usato -g0.

Per conoscere tutti I gruppi usate l’opzione -listg.

-G[NUM]

Lo stesso di -g ma stampa i nomi dei gruppi per ogni tag.

-h

Stampa l’output in formato HTML, implica l’uso del parametro –E.

-H

Mostra i tag ID numerici in formato Hexadecimal.

-htmlDump[OFFSET]

Genera una pagina dinamica web contenete un dump esadecimale dell’ EXIF.

Molto utile in caso di analisi a basso livello L’opzione -htmlDump è inoltre invocate se usato il parametro -v e -h.

-i DIR

Ignora nomi di directory specificati, possono essere multipli anche con -i.

-if EXPR

Specifica una condizione che verrà valutata prima di elaborare ogni file FILE se la condizione restituisce ‘true’ allora si continua nell’operazione. EXPR è una espressione Perl-like contenete nomi di tag preceduti dal simbolo $ . Quando si usano più condizioni consecutive, quest’ultime devono essere soddisfatte tutte per procedere alla elaborazione del file. Esempi:

# extract shutterspeed from all Canon images in a directory

exiftool -shutterspeed -if ‘$make eq “Canon”‘ dir

# add one hour to all images created on or after Apr. 2, 2006

exiftool -alldates+=1 -if ‘$CreateDate ge “2006:04:02″‘ dir

# set EXIF ISO value if possible, unless it is set already

exiftool ‘-exif:iso<iso’ -if ‘not $exif:iso’ dir

-k

Alla fine dell’elaborazione resta in pausa con il messaggio : — press any key —

-l

Usa il formato long 2-line Canon-style.

-L

Converte i caratteri 16-bit Unicode characters in Windows Latin1 (cp1252) invece che UTF-8.

-list, -listw, -listf, -listg[NUM], -listd

Stampa una list di tutti I nomi di tag validi (-list), tutti i nomi di tsg scrivibili (-listw), tutte le estensioni di file elaborabili (-listf), tutti i gruppi di tag [in una famiglia specifica] (-listg[NUM]), o tutti i gruppi di tag cancellabili (-listd). Le opzioni –list e -listw devono essere seguite da un argomento addizionale nella forma -GROUP:All per elencare tutti I tag in uno specifico gruppo. Con -listg, NUM deve essere specificato il gruppo di famiglia, altrimenti è assunto 0. Esempi :

-list # list all tag names

-list -EXIF:All # list all EXIF tags

-listw -XMP-dc:All # list all writable XMP-dc tags

-listf # list all recognized file extensions

-listg1 # list all groups in family 1

-listd # list all deletable groups

-m

Ignora errori minori. Permette la scrittura se occorrono alcuni errori minori, o l’estrazione d’immagini incluse che non sono in standard JPG.

-n

Legge e scrive valori come numeri al posto di parole. Questa opzione disabilita la conversione di stampa che viene applicata quando si estraggono valori. Esempi:

> exiftool -Orientation -S a.jpg

Orientation: Rotate 90 CW

> exiftool -Orientation -S -n a.jpg

Orientation: 6

I due seguenti comandi hanno lo stesso effetto

> exiftool -Orientation=’Rotate 90 CW’ a.jpg

> exiftool -Orientation=6 -n a.jpg

-o OUTFILE or FMT

Imposta il file o directry di output quando scrive informazioni. Il nome del file deve essere specificato usando una stringa FMT nella quale %d, %f e %e rappresentano la directory, il nome del file e l’estensione. Inoltre , %c deve essere usata per aggiungere un numero di copia. Vedere opzione -w.

-overwrite_original

Sovrascrive il file originale.

-overwrite_original_in_place

Simile a -overwrite_original eccetto che preserva gli attribute del file.

-p FMTFILE or EXPR

Stampa l’output formattato come specificato nel file o espressione. Il nome dei tag è preceduto dal simbolo $ è può contenere nomi di gruppo opzionali. Non sono case-sensitive. Le parentesi {} possono essere usate sul nome del tag per separarlo dal testo che lo segue. Usare $$ per scrivere il simbolo $. Se nel file una riga inizia per # verrà ignorata. Esempi:

# this is a comment line

File $FileName was created on $DateTimeOriginal

(f/$Aperture, ${ShutterSpeed}s, ISO $EXIF:ISO)

Produrrà questo output:

File test.jpg was created on 2003:10:31 15:44:19

(f/5.6, 1/60s, ISO 100)

-P

Preserva data/ora originali quando scrive.

-q

Esegue l’operazione senza output intermedio

-r

Scansiona le directory ricorsivamente.

-s

Stampa I nomi di tag anzichè la descrizione. Formato contratto dell’output. Si possono aggiungere sino a 3 –s .

-S

Forma contratta dell’aoutput.

-t

Output a tab-delimited list of description/values (useful for database import). May be combined with -s to print tag names instead of descriptions, or -S to print tag values only, tab-delimited on a single line.

-TagsFromFile SRCFILE or FMT

Copia il valore dei tag da SRCFILE a FILE. I nomi di tag a riga di comando dopo questa opzione specifica il tag da copiare o lo esclude. Se non vengono specificati dei tag, allora vengono copiati tutti. Possono essere utilizzati più di una specifica TagsFromFile.

Infine avrete compreso che con la semplice combinazione di queste opzioni possiamo realizzare un’analisi dei file di nostro interesse.

Esempi pratici di lettura dei tags

exiftool -a -u -g1 a.jpg
Stampa tuttle le informazioni da un’immagin, inclusi i tags duplicati. exiftool -common dir
Stampa tutti i tag comuni per tutte le immagin presenti nella directory dir. exiftool -s -ImageSize -ExposureTime b.jpg
Stampa i tag ImageSize and ExposureTime. exiftool -l -canon c.jpg d.jpg
Stampa le informazioni standard per Canon dalle due immagin specificate. exiftool -r -w .txt -common pictures
Estrae ricorsivamente, i tag comuni tra i file presenti nella directory pictures e ne scrive l’output in file con lo stesso nome dell’immagine analizzata ma con estensione txt. exiftool -p ‘$filename has date $dateTimeOriginal’ -q -f dir
Stampa una lineo di output contenente il nome del file ed il DateTimeOriginal per ogni immagine contenuta nella directory dir. exiftool -b -ThumbnailImage image.jpg > thumbnail.jpg
Salva immagini in formato anteprima dalle immagini .jpg in un fiel chiamato thumbnail.jpg. exiftool -b -PreviewImage 118_1834.JPG > preview.jpg
Estrae un’immagine di anteprima da flel JPG e lo scrive nel file preview.jpg. exiftool -b -JpgFromRaw -w _JFR.JPG -ext CRW -r .
Estrae ricorsivamente immagin  JPG da tutti i file Canon CRW presenti nella directory corrente aggiungendo  _JFR.JPG al nome in output. exiftool -d ‘%r %a, %B %e, %Y’ -DateTimeOriginal -S -s *.jpg
Stampa ina una directory formattato date/time per tutti i file JPG nella directory. exiftool -IFD1:XResolution -IFD1:YResolution
Estrae la risoluzione dell’immagine dall IFD1 EXIF(thumbnail image IFD). exiftool -htmldump -w tmp/%f_%e.html t/images
Genera una pagina HTML da un dump esadecimale delle informazioni EXIF in tutte le immagini presenti nella directory. I file output HTML sono scritti in una directory tmp (che viene creata se non esiste), con il nome di ogni file ‘FILENAME_EXT.html’.