Etnablog.altervista.org :)

Visitatore: 1311417
Welcome ospite
Menu di accessibilità:
Dimensione carattere:

Home > Linux > Ruotare in automatico le foto scaricate dalla fotocamera digitale
Contenuto della pagina:
29 Giugno 2007

Ruotare in automatico le foto scaricate dalla fotocamera digitale

Il comando jhead e le proprietà exif 

Scaricando le foto dalla mia fotocamera digitale, spesso mi era necessario perdere un pò di tempo a dovere raddrizzarle una ad una..

Su Windows le foto, al momento del download dalla mia fotocamera Canon, queste venivano direttamente ruotate, in automatico, dal software fornito in dotazione con la fotocamera, che ne leggeva le proprietà exif di orientamento.

E su Linux?

Semplice! Dopo avere scaricato tutte le foto, da shell portatevi nella cartella ove si trovano le foto e scrivete il comando:
 

jhead -autorot *

 
Il comando jhead, va scaricato da Synaptic.

* * * * * *

Complichiamoci la vita adesso:

Se volessimo fare in modo di ruotare tutte le foto in una cartella, comprese le foto contenute in eventuali sottocartelle, potremmo servirci del potentissimo comando "find". Ve lo presento in tre salse:

Prima forma:

 

jhead -autorot $(find . -type f -iname '*.jpg')

 
In sostanza, prima esegue il comando find su riga di comando e mette il suo output in pasto al comando jhead. Questo può dare qualche problema se la riga di comando è molto lunga.

Seconda forma:
 

find . -type f -iname '*.jpg' -exec jhead -autorot {} ;

 
In questa forma, viene eseguito UN comando jhead per OGNI file. Questo significa che se avete 100 file, verrà aperto 100 volte il comando jhead.
-type f -iname '*.jpg' letteralmente vuol dire "ogni file (non directory nè simlink o altro), che finisce per .jpg o .JPG o .JpG o .jPG (-iname, la "i" serve a renderlo case insensitive, cioè insensibile a minuscole-maiuscole).

Terza soluzione:
 

find . -type f -iname '*.jpg' | xargs -l 100 jhead -autorot

 
La lista dei file trovati da find, per quanto lunga sia, viene letta in blocchi di 100 files, e fa partire UN jhead per 100 files alla volta.

Quarta soluzione:
Ed ecco, infine, la soluzione che attualmente ritengo migliore ed attualmente è quella che uso:

 

find . -type f -iname '*.jpg' -print0 | xargs -0 jhead -autorot

 

Cosa vuol dire?
-print0: i singoli file restituiti da find verranno passati ad xargs in modo che vengano correttamente interpretati nonostante vi siano spazi vuoti o apici in mezzo.

Print0 separa i singoli file da un carattere speciale detto "NULL", in modo che xargs non faccia confusione tra spazi bianchi nei nomi dei file e la separazione dei file stessi.

Se find trova troppi file si corre il rischio che la stringa sia troppo lunga ed ecceda il limite di caratteri ammesso nella riga di comando.
Per questo motivo usiamo xargs che se la sbrigherà lui a fare in modo che questo non succeda. Inoltre, tramite il parametro -0, diciamo ad xargs che riconosca i singoli file perchè separati da un carattere "NULL". Per questo prima abbiamo usato -print0!




ps: thanks a lot to ndim for helping me writing this post wink.gif

Descrizioni usate nelle foto: 
Postato da: Etnablog in Linux alle 14:22

Permalink | Commenti(0)
Inserisci commento

Commenti:

Nessun commento. Vuoi essere il primo?
Solo gli utenti registrati possono lasciare commenti
*1 user online
Caricamento pagina: 0.02 s