domenica 23 agosto 2009

Rinominare e ridimensionare foto dalla riga di comando

Sono appena ritornato da una splendida vacanza nel Salento e con tutte le cose belle che ci sono da quelle parti, non potevo tornare a casa con 4 foto... infatti, tra me, mia figlia e mia moglie, ne abbiamo scattate quasi un migliaio. A questo punto i problemi da risolvere sono essenzialmente tre; prima di tutto selezionare cosa tenere e cosa no (e qui non vi posso aiutare), poi cercare di uniformare i nomi e le estensioni dei file con qualcosa di più rappresentativo e per ultimo ridimensionare le foto ad una risoluzione più consona alla pubblicazione su web. Poiché le foto sono state scattate con macchine fotografiche assai diverse, le caretteristiche dei file risultano tutt'altro che coerenti tra loro (sia sotto il profilo dei nomi, che delle risoluzioni), per cui, la cosa non è poi così semplice da fare... ma è proprio di questo che ci occuperemo ;-)

Una premessa - non sottovalutate la potenza della shell - quindi, fate una copia di backup delle vostre foto e lavorate solo su quelle!

Innanzitutto, dobbiamo renderci conto di quante foto abbiamo, quindi apriamo un terminale e spostiamoci con cd, nella cartella delle immagini, che nel mio caso è Foto/Salento/bkp:

$ cd Foto/Salento/bkp [invio]

poi contiamo i file con:

$ ls | wc -l [invio]

ma attenzione... se la cartella contiene sottocartelle (cosa non raccomandabile in questo caso), con il comando precedente, esse verranno contate; mentre se vogliamo calcolare solo i file e non le cartelle, dobbiamo affidarci a find, in questo modo:

$ find . -maxdepth 1 -type f | wc -l [invio]

quindi se i due comandi appena lanciati ci restituiscono lo stesso risultato, significa che non ci sono sottocartelle, ma solo file (ed è quello che vogliamo).

Bene, appena ci rendiamo conto dell'enorme quantità di scatti che siamo riusciti a produrre durante le nostre vacanze, ci assale il dubbio di dover passare le prossime settimane a rinominare e ridimensionare file davanti ad un computer... ma niente paura: Linux e la sua shell ci vengono sempre in aiuto.

Alcune macchine digitali memorizzano i nomi dei file in maiuscolo, mentre altre in minuscolo (e IMHO qui la colpa è anche di winzozz), causando un coacervo di nomignoli oscuri ed incomprensibili, quindi trasformeremo i nomi da miscuglio a tutto lowercase:

$ rename 'y/A-Z/a-z/' * [invio]

in seguito provvediamo a dare un nome più espressivo ai nostri scatti, con:

$ for n in *.jpg; do let q+=1 ; mv $n toonik$q.jpg; done [invio]

con quest'ultimo comando abbiamo preso tutti i file *.jpg presenti nella cartella corrente e successivamente li abbiamo rinominati con un prefisso comune (toonik) + un numero sequenziale crescente ($q) + la legittima estensione (.jpg).

Oppure, potremmo semplicemente voler aggiungere un prefisso comune a tutte le foto, in modo da renderle più identificabili:

$ rename 's/^/toonik/' *.jpg [invio]

e come risultato avremo tutti i nomi delle foto che iniziano con toonik.

Per concludere scaliamo tutte le foto ad una risoluzione più consona ad una web gallery:

$ mogrify -geometry 800x600 *jpg [invio]

Ulteriori informazioni sulla manipolazione delle immagini da terminale: Linux per tutti.

E comunque... abbiamo finito; avevamo paura di dover perdere intere giornate per mettere a posto le nostre foto, invece lo abbiamo fatto in meno di 5 minuti - niente male ;-)