Preparare le foto per la stampa con Gimp e ImageMagick

Fotografia Informatica

Un problema che ho frequentemente quando porto le mie foto digitali in un laboratorio per la stampa è che le proporzioni della carta (di solito mi piace stampare in 13 x 18 cm) possono essere diverse dalle proporzioni dell'immagine digitale.
Questo capita perchè le immagini prodotte dalla mia Nikon Coolpix 8800 hanno proporzioni 4:3, diverse dalle proporzioni 18:13, ma non solo: spesso per uso tagli diversi per migliorare la composizione della foto, insomma, per ragioni "artistiche".
Possiamo usare Gimp o ImageMagick per ovviare ai problemi associati a queste differenze di proporzioni.

Una mia foto reinquadrata

Quel che accade in laboratorio è che a volte l'operatore "reinquadra" le mie foto, cercando di riempire il foglio 13x18, e dunque vanificando i miei sforzi per comporre la fotografia in modo creativo e originale. Un modo per aggirare il problema è ricordarsi di raccomandare all'operatore di non allargare la foto oltre i bordi della carta... ma bisogna sperare che se lo ricordi o che le foto non passino per le mani di un altro operatore!
Un'altra cosa che può essere fastidiosa è che, in questo modo, attorno a due lati della fotografia stampata ci troviamo dei bordi bianchi più o meno sottili, bordi bianchi che a seconda della fotografia potrebbero anche essere brutti, se non intendiamo tagliare la stampa.

La mia soluzione è adattare le foto a monte, "inquadrandole" in una immagine delle dimensioni adeguate, prima di portarle in laboratorio.

Vi faccio vedere come farlo su una singola immagine usando Gimp, e come lo si può fare su tutte le immagini in una directory usando un po' di magia.

La procedura, in entrambi i casi, è questa: deciso il formato di stampa, allargo la superficie della foto e poi ci aggiungo uno sfondo del colore che mi sembra più adeguato all'immagine (di solito nero, ma anche bianco e grigio).

Prima di cominciare

Se pensi di usare solo Gimp e non ti vuoi avvantaggiare dell'elaborazione automatica con ImageMagick, puoi saltare questa parte!

Dobbiamo fare un conticino per decidere le dimensioni a cui la superficie va allargata. Una semplice proporzione. Prendiamo le dimensioni dell'immagine, nel mio caso 3264x2448, e le dimensioni della carta, ad esempio 18 cm x 13 cm, e calcoliamo i due rapporti, nel nostro esempio 3264/2448 = 1.333 e 18/13 = 1.385. Se i rapporti sono uguali, non c'è problema, non dobbiamo ridimensionare niente.
In caso contrario consideriamo la proporzione:
larghezza-foto : X1 = larghezza-carta : altezza-carta

e calcoliamo X1, la nuova larghezza dell'immagine:
X1 = larghezza-foto x altezza-carta / larghezza-carta

Se X1 > altezza-foto, allora X1 sarà l'altezza della nostra nuova immagine (arrotondata all'intero), mentre la larghezza rimarrà invariata, altrimenti dovremo considerare l'altra proporzione:
X2 : altezza-foto = larghezza-carta : altezza-carta

E calcoliamo:
X2 = altezza-foto x larghezza-carta / altezza-carta

In questo caso, se X2 > larghezza-foto, sarà la larghezza della nuova immagine, mentre altezza-foto sarà l'altezza dell'immagine finale.

Nel nostro esempio: X1 = 3264 x 13 / 18 = 2357.33 < 2448, dunque calcoliamo X2 = 2448 x 18 / 13 = 3389.54 L'immagine finale dovrà dunque essere di 3390 x 2448 pixel.

Se siete pigri, e volete fare meno calcoli possibile, basta che scegliete una risoluzione con le stesse proporzioni della carta ma di dimensioni maggiori dell'immagine originale: qualitativamente dovrebbe dare risultati lievemente peggiori, ma la cosa non dovrebbe essere apprezzabile con le fotografie digitali, che ormai hanno risoluzioni di oltre 4 mega pixel.
Un modo è prendere un numero maggiore del lato lungo della foto e ottenere la lunghezza del lato corto dividendo questo valore per il rapporto tra lato lungo e lato corto della carta. Ad esempio, prendiamo 3550 > 3264, calcoliamo 18/13 = 1.385 e dividiamo 3500/1.385 = 2527. La risoluzione che useremo sarà allora 3500x2527.

Occhio a non esagerare!

Preparazione con Gimp

Preparare le foto con Gimp è facile. Non dobbiamo neanche fare i calcoli citati prima, se non vogliamo.
Apriamo il file immagine con Gimp, e dal menù Immagine scegliamo Dimensione di stampa. Facendo attenzione all'unità di misura impostata, inseriamo la larghezza della carta su cui stamperemo la foto (ad esempio 180 mm), e clicchiamo nell'altro campo o premiamo TAB: Gimp ci calcolerà la lunghezza dell'altezza e la risoluzione di stampa necessaria. Se questo valore è maggiore dell'altezza della carta, inseriamo il valore corretto per l'altezza (nel nostro esempio 130 mm) e lasciamo che Gimp calcoli il valore necessario per la larghezza, che in questo caso sarà minore della larghezza della carta. Premiamo Ok per confermare (non vedremo accadere nulla).

Ora dal menù Immagine scegliamo Dimensione superficie, scegliamo di nuovo l'unità di misura come prima, ma stavolta clicchiamo sul lucchetto per sbloccare le proporzioni, e inseriamo i valori di altezza e larghezza della carta (uno dei due dovrebbe già essere a posto). Fatto ciò clicchiamo Centra e poi Ridimensiona. Gimp allargherà l'immagine, aggiungendo delle aree trasparenti attorno alla foto.

In alternativa, se abbiamo già fatto i conti citati prima, possiamo saltare direttamente a inserire i dati nella finestra Dimensione superficie.

Scegliamo il colore di primo piano, che sarà il colore del nostro bordo, e poi dal menù Livello scegliamo Nuovo livello. Nella finestra di dialogo selezioniamo Colore di primo piano come tipo di riempimento. Tutto sembrerà diventare del colore che abbiamo scelto prima. In realtà abbiamo aggiunto un nuovo livello sopra l'immagine, che essendo opaco non ci permette di veder quel che c'è sotto. Portiamo questo livello più indietro scgliendo nel menù Livello la voce Pila e poi Abbassa il livello.

Abbiamo finito: salviamo l'immagine in un nuovo file, cliccando su Esporta quando Gimp ci avviserà che le immagini JPG non supportano livelli e trasparenza.

Un po' di magia con ImageMagick

Gimp va bene se dobbiamo fare queste operazioni su 3-4 fotografie, ma se dobbiamo elaborare molte più immagini, diciamo 10, 20 o 100, la procedura è troppo lunga e laboriosa e diventa improponibile... ci vorrebbe un po' di magia!

In questo ci sono utili ImageMagick e il nostro sistema GNU/Linux (per quanto ci siano modi di fare la stessa cosa in Mac Os X e, forse, in MS Windows).

Vediamo innanzi tutto come usare il comando convert di ImageMagick per fare sulla riga di comando quello che abbiamo fatto poco fa con Gimp. Procuriamoci un terminale!

Il comando da digitare per il nostro esempio è (tutto su una riga, togliendo il carattere "\"):

convert immagine.jpg -resize 3390x2448 \
                     -size 3390x2448 xc:black +swap -gravity center \
                     -composite risultato.jpg

Come funziona: immagine.jpg è ovviamente l'immagine originale l'opzione -resize 3390x2448 gli dice di ridimensionare l'immagine, la dichiarazione -size 3390x2448 xc:black gli dice di generare un'immagine da 3390x2448 riempita di nero, le opzioni +swap -gravity center scambiano i due livelli e gli dicono di sovrapporre i centri dei livelli, infine -composite sovrappone i due livelli e il risultato dell'elaborazione viene scritto nel file risultato.jpg.

Per approfondire:
http://www.imagemagick.org/Usage/resize/#space_fill

Chiaramente, questo comando si può usare solo con le immagini con la stessa orientazione: nell'esempio, con le immagini in orientamento "paesaggio", mentre per le stesse immagini in orientamento "ritratto" dovremo scambiare i lati, e 3390x2448 diventa 2448x3390.

Se questo non è abbastanza magico per voi, mettete tutte le foto da elaborare in una directory (facendo attenzione che siano orientate allo stesso modo), create una sottodirectory preparate (dove andranno le immagini elaborate), e digitate (tutto su una riga, togliendo il carattere "\"):

find . -iname '*.jpg' | \
   xargs -l -i convert {} -resize 3390x2448 -size 3390x2448 xc:black \
   +swap -gravity center -composite -monitor preparate/{}

Voilà! In un colpo, abbiamo preparato tutte le nostre immagini, senza perdere tempo in operazioni ripetitive fatte a mano: tutto automatico!

Ma vediamo di capirci qualcosa. Questo comando usa find per cercare tutti i file con estensione ".jpg" nella directory corrente senza far distinzione tra maiuscole e minuscole e passa l'output a xargs che si occupa di compilare per noi i nomi dei file per il comando convert, cui abbiamo aggiunto l'opzione -monitor per avere sul terminale una scritta per ogni file salvato (invece di non aver nulla), così possiamo farci un'idea dell'avanzamento dell'elaborazione, che potrebbe anche richiedere molto tempo, a seconda delle dimensioni e del numero delle immagini.

Per approfondire consultate le pagine man e info di find e xargs.

Se proprio vogliamo la magia nera, possiamo mettere questi comandi dentro uno script da mettere nel nostro path, in modo da poter ripetere questa operazione tutte le volte che vogliamo, senza dover ricordare a memoria tutte le opzioni (al limite, modificando solo i valori della risoluzione).

Se poi siamo bravi nello scripting potremmo anche creare uno script in grado di riconoscere l'orientamento delle foto usando il comando identify di ImageMagick, ed eventualmente in grado di ruotare le immagini con orientamento "ritratto"... insomma, non c'è limite, al di fuori della nostra ignoranza e pazienza!

Trackback URL for this post:

http://gerlos.altervista.org/trackback/227

commenti

Invia nuovo commento

Il contenuto di questo campo è privato e non verrà mostrato pubblicamente.
  • Allowed HTML tags: <a> <em> <strong> <del> <cite> <code> <img> <ul> <ol> <li> <dl> <dt> <dd> <pre>
  • Linee e paragrafi vanno a capo automaticamente.
  • Insert Flickr images: [flickr-photo:id=230452326,size=s] or [flickr-photoset:id=72157594262419167,size=m].
  • Indirizzi web o e-mail vengono trasformati in link automaticamente

Maggiori informazioni sulle opzioni di formattazione.

CAPTCHA
Per provare che sei un visitatore umano, rispondi a questa domanda. È per evitare l'inserimento di messaggi spam.
Image CAPTCHA
Enter the characters shown in the image without spaces, also respect upper and lower case.