ridurre la risoluzione di una marea di img! soluzioni free

Forum per tutti i neofiti e gli esperti che vogliono proporre o rispondere ad argomenti che riguardano lo sviluppo di apllicazioni web basate in aprticolare su Html - Css - Php - MySql, ma non solo...

Moderatore: Michele

ridurre la risoluzione di una marea di img! soluzioni free

Messaggioda Michele » gio mag 25, 2006 4:08 pm

vi è mai capitato di fare un sito nel quale dove inserire una marea di immagini? :shock:
e dove questa immagini vi venivano portate da una marea di persone diverse? :shock:
che utilizzavano tutte macchinette diverse con risoluzioni diverse? :shock:

come fare a far diventare queste img tutte della stessa risoluzione? :idea:

in base all'ambiente sul quale preferite lavorare vi do queste 2 soluzioni:

per windows è esiste un programma completamente freeware che si chiama photo resize magic, ha un interfaccia molto semplice e intuitiva e vi permette di specificare alcune caratteristiche, anche se non tutte, che devono avere le foto ridotte! lo trovate qui:
http://www.realfiletools.com/free/photo-resize.htm

per linux non c'è bisogno di scaricare, ne istallare nulla (dovrebbe essere uguale per tutte le release, cmq io l'ho utilizzato su slackware tanto per cambiare!!! :P), dovete seplicemente usare un comando che si chiama convert!
è un comando molto potetnte e si andate a leggere il man mi accorgerete di quanti sono gli aspetti che potete modificare delle immagini da ridurre, ora vi faccio vedere come l'ho usato io, lo quoto perchè cmq è uno script che mi ha fatto vedere Matteo:
prima di tutto vi spostate all'interno che contiene le img delle varie grandezze, poi scrivete
for a in *; do echo $a; convert $a -resize 400x400 /temp/$a; done

in quersto caso le riduco a una risoluzione 400x400 e faccio mettere le immagini elaborate in temp una cartella creata precedentemente!
se volessimo mantere proporzioni di partenza basta semplicemente non specificare una delle 2 dimensioni!!!
quindi se avessi un' img 1024x768 e la so che la sua larghezza massima deve essere 400 e non mi va di calcolarmi l'altezza con le proporzioni, basta che scrivo
400x invece di 400x400, e funziona anche volendo specifcare solo l'altezza ma questa volta dovremmo sostituirgli x400! :wink:
Michele
 
Messaggi: 308
Iscritto il: ven mar 17, 2006 2:14 am

Messaggioda Michele » sab giu 02, 2007 12:33 pm

Piccola miglioria che puo essere usata nel caso del comando testuale per linux è
Codice: Seleziona tutto
for a in *; do echo $a; convert $a -quality 80 -resize 400x400 /temp/$a; done

che permette di specificare la qualità dell'immagine e quindi aumentare la compressione diminuendio la qualità, per ottenere immagini un po' più piccole... :wink:
Michele
 
Messaggi: 308
Iscritto il: ven mar 17, 2006 2:14 am

Messaggioda Michele » mar ott 14, 2008 3:34 pm

Visto che nel frattempo mi è capitato di doverci rilitigare con imagemagick vi riporto un'articolo che potete trovare anche qui con una serie di opzioni utili, buona lettura:

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:

Codice: Seleziona tutto
$ mogrify -geometry 300x200 *jpg


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:

Codice: Seleziona tutto
# apt-get install imagemagick libjpeg-progs netpbm dcraw


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:

Codice: Seleziona tutto
$ mogrify -geometry 800x600 immagine.jpg


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

Codice: Seleziona tutto
$ mogrify -geometry 800x600! immagine.jpg


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

Codice: Seleziona tutto
$ mogrify -geometry 50%x50% immagine.jpg


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

Codice: Seleziona tutto
$ mogrify -geometry 130%x130% immagine.jpg


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

Codice: Seleziona tutto
$ mogrify -geometry 140%x40% immagine.jpg


per ruotare quadrato.jpg di 90 gradi:

Codice: Seleziona tutto
$ mogrify -rotate 90 quadrato.jpg


per ruotare largo.jpg di 180 gradi:

Codice: Seleziona tutto
$ mogrify -rotate '180>' largo.jpg


per ruotare alto.jpg di 180 gradi:

Codice: Seleziona tutto
$ mogrify -rotate '180<' alto.jpg


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

Codice: Seleziona tutto
$ mogrify -flip verticale.jpg


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

Codice: Seleziona tutto
$ convert -flip sopra.jpg sotto.jpg


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

Codice: Seleziona tutto
$ mogrify -flop orizzontale.jpg


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

Codice: Seleziona tutto
$ convert -flop destra.jpg sinistra.jpg


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

Codice: Seleziona tutto
$ mogrify -colors 2 colore.jpg


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

Codice: Seleziona tutto
$ mogrify -colors 4 -dither colore.jpg


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

Codice: Seleziona tutto
$ mogrify -map colore.jpg immagine.jpg


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

Codice: Seleziona tutto
$ convert -colorspace gray colore.jpg scaladigrigi.jpg


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

Codice: Seleziona tutto
$ mogrify -colorspace gray colore.jpg


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

Codice: Seleziona tutto
$ convert -monochrome colore.jpg monocromatico.jpg


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

Codice: Seleziona tutto
$ mogrify -monochrome colore.jpg


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

Codice: Seleziona tutto
$ mogrify -border 2x8 immagine.jpg


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

Codice: Seleziona tutto
$ mogrify -frame 10x10 immagine.jpg


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

Codice: Seleziona tutto
$ 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


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:

Codice: Seleziona tutto
$ montage immagine.jpg -background white -geometry +10+10 -shadow biancoombra.jpg


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

Codice: Seleziona tutto
$ montage immagine.jpg -background none -geometry +10+10 -shadow trasparenteombra.png


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

Codice: Seleziona tutto
$ montage img1.jpg img2.jpg img3.jpg img4.jpg img5.jpg img6.jpg img7.jpg img8.jpg collage.png


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

Codice: Seleziona tutto
$ combine piccola.jpg grande.jpg fusione.jpg


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

Codice: Seleziona tutto
$ combine -blend 70 prima.jpg seconda.jpg fusione.jpg


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

Codice: Seleziona tutto
$ combine -compose difference prima.jpg seconda.jpg risultato.jpg


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

Codice: Seleziona tutto
$ mogrify -comment "ciao mondo!" immagine.jpg


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

Codice: Seleziona tutto
$ wrjpgcom "ciao mondo!" immagine.jpg


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

Codice: Seleziona tutto
$ rdjpgcom immagine.jpg


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:

Codice: Seleziona tutto
$ convert immagine.png immagine.jpg


lo stesso risultato si ottiene con:

Codice: Seleziona tutto
$ mogrify -format jpg immagine.png


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

Codice: Seleziona tutto
$ mogrify -format jpg *.png


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:

Codice: Seleziona tutto
$ convert -delay 15 toonik*.jpg toonik.gif


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

Codice: Seleziona tutto
$ convert -morph 15 -delay 10 viso1.jpg viso2.jpg metamorfosi.gif


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.

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


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:

Codice: Seleziona tutto
$ display immagine.jpg


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:

Codice: Seleziona tutto
$ import finestra.jpg


per catturare una schermata dell’intero desktop digitare:

Codice: Seleziona tutto
$ import -window root schermo.jpg


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:

Codice: Seleziona tutto
$ identify immagine.jpg


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

Codice: Seleziona tutto
$ identify -verbose immagine.jpg


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

Codice: Seleziona tutto
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:

Codice: Seleziona tutto
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:

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


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.
Michele
 
Messaggi: 308
Iscritto il: ven mar 17, 2006 2:14 am

Messaggioda Michele » mar ott 14, 2008 5:38 pm

volevo aggiugere inoltre che con il codice presentanto nel rpimo post:
Codice: Seleziona tutto
for a in *; do echo $a; convert $a -resize 400x400 /temp/$a; done

Si potrebbero verificare un po' di problemi quando il nome delle immagini ha degli spazi, ad esempio: foto vacanze.jpg
per risolvere il problema basta usare i doppi apici:
Codice: Seleziona tutto
for a in *; do echo "$a"; convert "$a" -resize 400x400 "/temp/$a"; done


Buona conversione... :lol:
Michele
 
Messaggi: 308
Iscritto il: ven mar 17, 2006 2:14 am

Messaggioda Michele » mar ott 14, 2008 6:04 pm

de dovesse servirvi infine di zipparle tutte ecco il comando che può essere usato con qualsiasi tipo di file:
Codice: Seleziona tutto
for a in *; do echo "$a"; zip "$a.zip" "$a"; done
Michele
 
Messaggi: 308
Iscritto il: ven mar 17, 2006 2:14 am

Messaggioda Michele » mer ott 15, 2008 6:13 pm

altra impostazione utilissima:
Codice: Seleziona tutto
for a in *; do echo "$a"; convert "$a" -quality 60 "$a"; done


per diminuire la qualità, cioè aumentare la compressione jpg! :lol:
Michele
 
Messaggi: 308
Iscritto il: ven mar 17, 2006 2:14 am

Messaggioda Michele » mer ott 15, 2008 6:13 pm

cmq sul sito http://www.imagemagick.org/script/comma ... essing.php

ci sono tutte le possibili opzioni da specificare!

:idea:
Michele
 
Messaggi: 308
Iscritto il: ven mar 17, 2006 2:14 am


Torna a Webmaster

Chi c’è in linea

Visitano il forum: Nessuno e 1 ospite

cron