Foto raw con Linux e Dcraw

14 08 2008

Ho ancora addosso il profumo del mare di Hvar e sono assorto nei ricordi della vacanza appena trascorsa, ma ecco che all’improvviso irrompe nel mio ufficio Carlos (un ragazzo argentino che tutti vorrebbero come amico perché è ricco… di neuroni), che mi dice: “su Linux Magazine c’è qualcosa che ti riguarda”. Carlos è felice quando mi vede (gli ho fatto conoscere Linux e lui me ne è grato) ed anch’io sono contento di rivederlo perché lui è sempre… allegro (l’unico problema è che non riesco a capire quando è incazzato). Io non so a cosa si riferisca Carlos, per cui corro a comprare Linux Magazine di agosto e cerco un indizio, ma niente, quindi dopo inutili e sterili ricerche mi decido a chiedere spiegazioni…  in effetti qualcosa c’era, ed a Carlos non era sfuggita, mentre a me si… e questo non è bene 😦  Carlos non si è fermato allo strato superficiale – è riuscito a guardare oltre – in puro stile hacker. Io all’inizio pensavo si trattasse di qualche mio screenshot (come già accaduto in passato), invece questa volta era qualcosa di molto più subliminale… in pratica sia in copertina che all’interno appare per ben 3 volte il disegno di un omino dallo stile vacanziero con una bella macchina fotografica al collo, ebbene Carlos mi ha fatto notare che quella quasi impercettibile riga bianca sulla fotocamera è la scritta: “Toonik”… a questo punto ho scansionato la rivista ed ho potuto appurare che la scritta in realtà è Tonik e non Toonik, comunque il senso non cambia e considerando la mia passione per la fotografia, ne approfitto per scrivere un piccolo articolo su come gestire il formato raw delle fotocamere digitali con Linux.

Innanzitutto spieghiamo brevemente cos’è il formato raw, esso è un particolare metodo di memorizzazione dei dati descrittori di un’immagine che permette di non avere nessuna perdita di qualità rispetto ai segnali catturati dall’apparato. Quindi un file raw, contiene informazioni grezze provenienti direttamente dal sensore della fotocamera, senza subire nessuna elaborazione all’interno della stessa, ed è per questo che può essere equiparato al negativo delle classiche macchine fotografiche a pellicola. Inoltre in una foto raw i colori sono rappresentati da 12 o 14 bit invece che dagli 8 bit del formato jpg, quindi si avranno a disposizione ben 16.000 sfumature di Red, Green e Blue invece delle 256 del jpg. Tutto ciò consente ai fotografi professionisti di avere una più efficace gestione del colore ed un controllo totale sull’immagine, anche se bisogna tener conto del fatto che la maggior quantità di informazioni contenute in un file raw si traduce anche in una dimensione maggiore rispetto ad un jpg. Prima di iniziare è importante ricordare che i produttori di fotocamere (e non solo) identificano i propri file raw ognuno in modo diverso, dando origine ad un numero considerevole di estensioni. Ovviamente nell’eseguire gli script sottostanti ricordate di sostituire l’estensione raw con quella giusta… in caso di dubbi consultate questa tabella:

Formato

Produttore

a r w

S o n y

c r 2

C a n o n

c r w

C a n o n

d c r

K o d a k

d n g

A d o b e

e r f

E p s o n

k d c

K o d a k

m r w

M i n o l t a

n e f

N i k o n

o r f

O l y m p u s

p e f

P e n t a x

p t x

P e n t a x

r a f

F u j i

r a w

P a n a s o n i c

s r f

S o n y

x 3 f

S i g m a

Sotto Linux è possibile gestire questo tipo di file con dcraw, un potentissimo tool a riga di comando (ma che strano). Per pura combinazione… ehm ehm, nel post precedente “Modificare immagini dalla riga di comando” avevamo provveduto a dare questo comando:

# apt-get install imagemagick libjpeg-progs netpbm dcraw [invio]

quindi dovreste aver già installato tutto il necessario (se così non fosse il comando sopracitato è sempre valido). Il numero delle fotocamere supportate da questo software è considerevole, per cui se la vostra è tra queste, possiamo iniziare, tenendo bene in mente che l’utilizzo di base di dcraw è semplicissimo… mentre l’utilizzo avanzato è difficilissimo… noi seguiremo la prima via!

Di default dcraw produce un file ppm (Portable PixMap) lasciando inalterato il raw originale, per cui il comando seguente creerà il file foto.ppm nella stessa cartella contenente il file foto.raw

$ dcraw foto.raw [invio]

il comportamento di default può essere cambiato con l’opzione T che produrrà un file tiff con metadati

$ dcraw -T foto.raw [invio]

l’opzione -e estrae la miniatura (solitamente una jpg) generata dalla fotocamera… attenzione non elabora l’immagine grezza:

$ dcraw -e foto.raw [invio]

usando l’opzione -h generiamo un’immagine a colori con dimensioni dimezzate:

$ dcraw -h foto.raw [invio]

mentre -a calcola il bilanciamento del bianco dalla media dell’intera immagine:

$ dcraw -a foto.raw [invio]

l’opzione -c scrive sullo standard output le immagini decodificate:

$ dcraw -c foto.raw [invio]

quest’ultima opzione è necessaria nel caso volessimo usare una pipe per estrarre la foto e convertirla al volo in jpg con ppmtojpeg:

$ dcraw -c foto.raw | ppmtojpeg > foto.jpg [invio]

nel caso volessimo processare molte foto in batch possiamo eseguire questo scriptino:

$ for i in *.raw; do dcraw -c -a -h $i | ppmtojpeg > `basename $i raw`jpg; echo $i " Conversione riuscita"; done [invio]

Attenzione – il comando precedente dovete eseguirlo all’interno della cartella contenente le foto, o in alternativa aggiungete il $PATH completo in questo modo:

$ for i in ~/cartella_delle_foto/*.raw; do dcraw -c -a -h $i | ppmtojpeg > `basename $i raw`jpg; echo $i " Conversione riuscita"; done [invio]

considerando la lunghezza del comando, potrebbe essere conveniente inserirlo in uno script da tenere sempre a portata di… tastiera.

Un’altro esempio di script è il seguente:

if (for f in ~/cartella_delle_foto/*.raw
do
dcraw -c "$f" | pnmtojpeg > "${f/.raw/.jpg}"
done
)
then
echo "Conversione raw eseguita con successo"
else
echo "Errore... conversione non riuscita"
fi

dimenticavo… negli script bash inserite sempre lo shabang

Ovviamente con dcraw si possono fare molte più cose di quante viste in questo contesto e per chi volesse approfondire l’argomento segnalo questo manuale

Bene… visto che ci siamo divertiti abbastanza, vi confesso che per elaborare foto raw con linux esistono anche software interattivi e soprattutto… ad interfaccia grafica… ora direte qualche parolaccia, ma poi vi passa e sarete felici di aver appreso le basi di dcraw… comunque se proprio volete usare un programma grafico, eccovi una lista (non esaustiva) di quelli disponibili per GNU/Linux.

Annunci




Modificare immagini dalla riga di comando

29 02 2008

Oggi vedremo come gestire le immagini dalla riga di comando, però prima devo parlare di cosa ha ispirato questo post…

L’Università Politecnica delle Marche, l’ISTAO, la Camera di Commercio di Ancona, la Regione Marche e Marche Capital hanno dato vita a eCapital (Business Plan Competition) – un concorso che premia i migliori progetti scaturiti dalle fervide menti degli studenti marchigiani – ed è finalizzato a mettere in contatto il mondo accademico con quello imprenditoriale, in particolare consente ai giovani di trovare capitalisti interessati a finanziare le idee più innovative… almeno in teoria 😉

Potevo esimermi dal presentare un progetto basato su Linux? Ovviamente no, quindi insieme ai miei nipotini Massi e Mattia presento l’idea di un computer basato su una versione personalizzata di Linux, che ci consente di arrivare alla finalissima svoltasi il 9 ottobre 2007 al Teatro delle Muse di Ancona. In quell’occasione facemmo molte foto (soprattutto a Juliana Moreira e Ljdie Pages). Bene, non ci crederete ma da allora ho sempre tergiversato sino a qualche giorno fa, quando Massi e Mattia mi hanno dato l’ultimatum per pubblicare le foto della serata su Picasaweb. A questo punto però si presenta la necessità di sincronizzare e selezionare le nostre foto a distanza; per farla corta… devo ridimensionare tutte le foto della serata per poterle inviare agevolmente attraverso la rete, quindi approfitto della presenza nel mio ufficio di Marco – un amico passato da poco a Linux – e gli dico: Marco, per favore mi dimensioneresti tutte le foto contenute nella cartella Ecapital a 300×200 mentre vado a prendere un caffè con il mio cliente? Ok, risponde lui… ma quando ritorno ne aveva ridimensionate appena una decina, quindi mi rendo subito conto che Marco non conosce ImageMagick e… avreste dovuto vedere la faccia che ha fatto quando ho processato oltre 200 foto in una manciata di secondi con un semplice:

$ mogrify -geometry 300x200 *jpg [invio]

Ebbene si, ho approfittato dell’occasione per parlare di eCapital (come promesso ai nipotini), ma soprattutto per far conoscere ai nuovi entusiasti di Linux una serie di comandi per manipolare immagini di ogni genere.

Prima di procedere verifichiamo che nel nostro sistema sia installato ImageMagick, e se così non fosse… installatelo:

# apt-get install imagemagick libjpeg-progs netpbm dcraw [invio]

N.B. libjpeg-progs, netpbm e dcraw completano il set di strumenti per la manipolazione delle immagini da riga di comando.

Fatto questo sarete pronti per sperimentare la potenza dei comandi disponibili… buon divertimento.

mogrify è uno dei comandi messi a disposizione di ImageMagick ed accetta varie opzioni, iniziamo con lui:

per ridimensionare immagine.jpg a 800×600 px preservando le proporzioni originali:

$ mogrify -geometry 800x600 immagine.jpg [invio]

per ridimensionare immagine.jpg a 800×600 px forzando l’esatta dimensione senza mantenere le proporzioni originali:

$ mogrify -geometry 800x600! immagine.jpg [invio]

per ridurre le dimensioni di immagine.jpg del 50%:

$ mogrify -geometry 50%x50% immagine.jpg [invio]

per aumentare le dimensioni di immagine.jpg del 30%:

$ mogrify -geometry 130%x130% immagine.jpg [invio]

per aumentare la larghezza del 40% e diminuire l’altezza del 40% ad immagine.jpg:

$ mogrify -geometry 140%x40% immagine.jpg [invio]

per ruotare quadrato.jpg di 90 gradi:

$ mogrify -rotate 90 quadrato.jpg [invio]

per ruotare largo.jpg di 180 gradi:

$ mogrify -rotate '180>' largo.jpg [invio]

per ruotare alto.jpg di 180 gradi:

$ mogrify -rotate '180<' alto.jpg [invio]

mogrify con l’opzione flip ribalta verticalmente l’immagine verticale.jpg

$ mogrify -flip verticale.jpg [invio]

convert con l’opzione flip ribalta verticalmente sopra.jpg  creando sotto.jpg

$ convert -flip sopra.jpg sotto.jpg [invio]

mogrify con l’opzione flop ribalta orizzontalmente l’immagine orizzontale.jpg

$ mogrify -flop orizzontale.jpg [invio]

convert con l’opzione flop ribalta orizzontalmente destra.jpg  creando sinistra.jpg

$ convert -flop destra.jpg sinistra.jpg [invio]

per trasformare colore.jpg in un’immagine a 2 colori:

$ mogrify -colors 2 colore.jpg [invio]

per trasformare colore.jpg in un’immagine a 4 colori con il miglioramento dell’errore prodotto dall’algoritmo Floyd-Steinberg:

$ mogrify -colors 4 -dither colore.jpg [invio]

per applicare la mappa dei colori di colore.jpg ad immagine.jpg:

$ mogrify -map colore.jpg immagine.jpg [invio]

per trasformare colore.jpg in bianco e nero in scala di grigi (tipo foto) preservando l’originale:

$ convert -colorspace gray colore.jpg scaladigrigi.jpg [invio]

invece per trasformare colore.jpg in bianco e nero in scala di grigi (tipo foto) sostituendo l’originale:

$ mogrify -colorspace gray colore.jpg [invio]

per trasformare colore.jpg in bianco e nero monocromatico (tipo fax) preservando l’originale:

$ convert -monochrome colore.jpg monocromatico.jpg [invio]

invece per trasformare colore.jpg in bianco e nero monocromatico (tipo fax) sostituendo l’originale:

$ mogrify -monochrome colore.jpg [invio]

per aggiungere un bordo con 2 px di larghezza e 8px di altezza ad immagine.jpg:

$ mogrify -border 2x8 immagine.jpg [invio]

per aggiungere una cornice di 10 px ad immagine.jpg:

$ mogrify -frame 10x10 immagine.jpg [invio]

con l’aiuto di convert possiamo anche riuscire a creare il nostro logo dalla riga di comando:

$ convert -size 310x70 xc:transparent -font Bookman-DemiItalic -pointsize 72 -draw "text 25,60 'Toonik'" -channel RGBA -gaussian 0x6 -fill yellow -stroke black -draw "text 20,55 'Toonik'" marchioToonik.png [invio]

non male… vero?

Ovviamente, specificando un font diverso (es: Times-Bold o Helvetica-Bold) potremo cambiare carattere al nostro logo.

ora passiamo a montage che ci consente di aggiungere un’ombra su sfondo bianco ad una foto:

$ montage immagine.jpg -background white -geometry +10+10 -shadow biancoombra.jpg [invio]

se invece volessimo aggiungere un’ombra su sfondo trasparente ad una foto:

$ montage immagine.jpg -background none -geometry +10+10 -shadow trasparenteombra.png [invio]

bene, usiamo ancora montage, ma questa volta per effettuare il montaggio di molte immagini in una sola di nome collage.png:

$ montage img1.jpg img2.jpg img3.jpg img4.jpg img5.jpg img6.jpg img7.jpg img8.jpg collage.png [invio]

per fondere 2 immagini in una di nome fusione.jpg:

$ combine piccola.jpg grande.jpg fusione.jpg [invio]

puoi fondere 2 immagini in una di nome fusione.jpg assegnando la percentuale di fusione della 2° rispetto alla 1°:

$ combine -blend 70 prima.jpg seconda.jpg fusione.jpg [invio]

assegnando l’argomento difference all’opzione compose del comando combine si ottiene il morphing dell’immagine:

$ combine -compose difference prima.jpg seconda.jpg risultato.jpg [invio]

con l’opzione -comment possiamo aggiungere un commento ad immagine.jpg:

$ mogrify -comment "ciao mondo!" immagine.jpg [invio]

per aggiungere commenti possiamo utilizzare anche il comando wrjpgcom reso disponibile dal pacchetto libjpeg-progs:

$ wrjpgcom "vaffanculo al mondo!" immagine.jpg [invio]

possiamo subito verificare l’esito dei comandi precedenti con il comando rdjpgcom che è anch’esso contenuto in libjpeg-progs:

$ rdjpgcom immagine.jpg [invio]

Imagemagick supporta un numero impressionante di formati e la conversione avviene con una semplicità disarmante, il comando seguente trasforma il file immagine.png in un file jpg:

$ convert immagine.png immagine.jpg [invio]

lo stesso risultato si ottiene con:

$ mogrify -format jpg immagine.png [invio]

con quest’ultimo approccio è anche facile convertire in batch un’intera cartella di foto eseguendo:

$ mogrify -format jpg *.png [invio]

facile vero?

ritornando a convert, esso non si limita alla sola conversione dei formati, ma si rivela utile in molte occasioni, per esempio il prossimo comando convertirà una serie di immagini in una gif animata con un ritardo di 15 centesimi di secondo tra un frame e un altro:

$ convert -delay 15 toonik*.jpg toonik.gif [invio]

per creare un effetto di metamorfosi da viso1.jpg a viso2.jpg attraverso una transizione di 15 frame con ritardo di 10 millisecondi:

$ convert -morph 15 -delay 10 viso1.jpg viso2.jpg metamorfosi.gif [invio]

nel prossimo esempio convert prenderà l’immagine originale.jpg le aggiungerà un bordo 15×15 di colore bianco, poi scriverà in basso a destra la frase tra virgolette con il carattere courier, grandezza 12 e il colore rosso. La frase terminerà a 15 pixel dal bordo laterale destro e sarà distante 10 pixel dal bordo inferiore.

$ convert -border 15x15 -bordercolor white -gravity SouthEast -font courier -pointsize 12 -fill red -draw 'text 15,10 "saluti da toonik"' originale.jpg modificato.jpg [invio]

il comando display è essenzialmente un visualizzatore, ma attivando l’interfaccia grafica con un click si può accedere alle opzioni di ImageMagick… per visualizzare un’immagine digitiamo semplicemente:

$ display immagine.jpg [invio]

import consente di fotografare lo schermo, per fotografare una finestra digitare il comando seguente e quando il cursore prende la forma di una croce cliccare sulla finestra che si vuol fotografare:

$ import finestra.jpg [invio]

per catturare una schermata dell’intero desktop digitare:

$ import -window root schermo.jpg [invio]

l’ultimo comando che analizzeremo serve ad ottenere informazioni sul formato, dimensione e colori del file, quindi per conoscere le caratteristiche del file immagine.jpg digitiamo:

$ identify immagine.jpg [invio]

con l’opzione -verbose si accede a delle informazioni aggiuntive sul file, tra cui eventuali commenti:

$ identify -verbose immagine.jpg [invio]

dimenticavo… il bello della riga di comando è che si possono anche realizzare simpatici script come questo:

for i in *.jpg; do
convert -scale 50% $i toonik-$i
done

o ancora meglio…

come questo postatomi da Simotrone che in un sol colpo crea delle utilissime miniature delle nostre foto e le nomina con l’aggiunta del suffisso thumb in modo da distinguerle da quelle originali che comunque rimarranno inalterate:

for ARG in foto*; do
convert $ARG -thumbnail 300x `echo $ARG | sed s/jpg/thumb\.jpg/`
done

ovviamente il tutto può essere eseguito dal terminale, direttamente come comando:

$ for ARG in foto*; do convert $ARG -thumbnail 300x `echo $ARG | sed s/jpg/thumb\.jpg/`; done [invio]

a patto di posizionarsi preventivamente all’interno della cartella contenente le foto…

e sostituendo foto* con i caratteri iniziali usati dalla vostra camera digitale come prefisso alla numerazione.

Ovviamente le possibilità offerte da ImageMagick sono mooolte di più, ma lascio a voi il piacere della scoperta 🙂 per quanto mi riguarda spero di aver stimolato in chi legge questo blog (pochi amici e parenti) la giusta curiosità su un aspetto di Linux che ultimamente viene troppo spesso dimenticato… la potenza della shell.

Toonik





Enlightenment E17 Desktop

10 06 2007

Certo che di acqua sotto i ponti ne è passata da quando Enlightenment era il window manager di Gnome, tanto che oggi sarebbe riduttivo definirlo tale e il termine più appropriato per riferirsi ad E17 è “Desktop Shell”.

In sintesi, E17 è un ambiente grafico talmente curato nell’aspetto, da essere considerato – a ragione – una forma d’arte (non a caso è facile imbattersi in opere realizzate da sviluppatori di E17 su Deviantart).

Come ovvio, in questi casi la cosa migliore per capire di cosa stiamo parlando, è quella di installare tutto il necessario e vedere di persona quanto sia curato ed attraente un desktop E17. Oggigiorno non è più un problema installare E17 in Linux ed ora vedremo come farlo con Debian.

Per raggiungere il nostro scopo, dobbiamo per prima cosa aggiungere i repository di E17 nel file /etc/apt/sources.list in questo modo…

diventiamo root con:

$ su [invio]

password: [invio]

poi apriamo il file dei repository:

# gedit /etc/apt/sources.list [invio]

ora aggiungiamo la seguente riga:

deb http://debian.alphagemini.org/ unstable main

deb http://debian.alphagemini.org/debian/ unstable main

deb http://edevelop.org/debian unstable main

deb http://edevelop.org/pkg-e/ubuntu edgy e17

salviamo e chiudiamo.

Adesso preleviamo la chiave necessaria ad autenticare il repository appena aggiunto:

$ wget http://xsm.alphagemini.org/files/archive_key.asc [invio]

$ wget http://www.alphagemini.org/files/archive_key.asc [invio]

$ wget http://lut1n.ifrance.com/repo_key.asc [invio]

e procediamo con la sua acquisizione:

# apt-key add archive_key.asc [invio]

# apt-key add repo_key.asc [invio]

Bene ora siamo pronti, quindi aggiorniamo la lista dei pacchetti disponibili con:

# apt-get update [invio]

ed infine procediamo con l’installazione vera e propria:

# apt-get install e17 e17-extras [invio]

Finito, al prossimo riavvio potrete selezionare dal login manager il fantastico E17… sarà un vero piacere per gli occhi !

Per i soliti impazienti è possibile vedere qui una delle mie schermate.

Toonik





Internet Explorer con Linux

31 03 2007

No, no, non avete capito male…

sto parlando proprio di lui il browser di casa Microsoft©.

Direte… e cosa ce ne facciamo di ie quando in Linux abbiamo ottimi browsers come Epiphany, Firefox, Konqueror ed altri ? Effettivamente non ha senso usare ie con Linux (aggiungo: neppure in Windows), solo che quando si ha necessità di testare un sito, occorre verificarne la corrispondenza anche in internet explorer…        ora, avendo depurato la mia casa da Windows©, non mi resta altra scelta, che installare ie su Linux.

Premetto che per ottenere lo stesso risultato ci sono diversi modi, ma poiché molti lettori di questi articoli sono amici alle prime armi, per raggiungere il nostro scopo adotteremo un approccio veloce ed indolore.

Bene prima di iniziare è necessario installare nel nostro sistema wine e cabextract, che nel caso abbiate una Debian o derivate, il tutto si riduce ad un semplice:

# apt-get install wine cabextract [invio]

– soddisfatte le dipendenze, aprite un terminale e digitate:
$ wget http://www.tatanka.com.br/ies4linux/downloads/ies4linux-latest.tar.gz [invio]
wget scaricherà nella cartella corrente il file ies4linux-latest.tar.gz

– decomprimetelo con:

$ tar xzvf ies4linux-latest.tar.gz [invio]

– entrate nella cartella creata dalla decompressione del file con:

$ cd ies4linux-xxx [invio]

dove xxx è il numero di versione – per vedere il contenuto della cartella usate:

$ ls -l [invio]

– ora non vi resta che eseguire lo script di installazione e seguire le istruzioni a video:

$ ./ies4linux [invio]

saranno poste alcune domande che vi consentiranno di installare in un sol colpo diverse versioni di internet explorer, il plug-in flash e la localizzazione in italiano.

Nel caso abbiate un desktop-manager tipo Gnome, verranno create le icone sul desktop, ma se come me usate prevalentemente un window-manager leggero sarà necessario avviare ie da terminale oppure creare un’ apposita voce di menu… a manina. Da riga di comando è sufficiente digitare:

$ /home/tuo_utente/bin/ie6 [invio]

$ /home/tuo_utente/bin/ie55 [invio]

$ /home/tuo_utente/bin/ie5 [invio]

per avviare i corrispondenti programmi

… ehmm dimenticavo, provate ad eseguire 3 differenti versioni di internet explorer in windows e fatemi sapere come è andata 🙂

Toonik