Scopriamo Guetzli, il nuovo encoder per immagini JPEG, che promette un alto tasso di compressione dati unito a una eccellente qualità di visualizzazione. La dimensione delle foto, infatti, risulta essere anche del 30% in meno dei normali compressori di questo tipo. Guetzli tratta solo JPEG non progressivi (standard) al fine di ottenere la massima velocità nella decompressione e nella visualizzazione.
Velocità del Web
Una delle priorità di Google è quella di favorire una navigazione su Internet estremamente veloce e senza intoppi. E una delle strade percorribili è proprio quella di rendere le immagini più "leggere" e con una decodifica di decompressione più snella e immediata. Ha introdotto, così, l'algoritmo per encoder d'immagini Guetzli. Il suo scopo principale è quello d'incrementare il numero di pagine su Internet diminuendo il flusso dei dati sulla grande rete.
Guetzli, un algoritmo open source
Guetzli è un nuovo algoritmo open source che crea immagini di alta qualità JPEG con dimensioni di file del 35% più piccoli rispetto ai metodi attualmente disponibili. Questo consente ai webmaster di creare le proprie pagine web in grado di caricarsi molto più velocemente e di utilizzare, in tal modo, ancora meno dati sulla Rete.
Si tratta di un encoder JPEG per immagini digitali e grafica per il web che consente di operare online molto più velocemente di prima, dal momento che esso produce file JPEG più leggeri, dal punto di vista dell'occupazione di memoria. L'algoritmo, inoltre, promette di mantenere la compatibilità sia con i browser esistenti e più obsoleti che con le applicazioni per l'elaborazione delle immagini e lo standard JPEG attuale. Google afferma che, praticamente, Guetzli è abbastanza simile all'algoritmo Zopfli, che produce file più piccoli di tipo PNG e gzip.
La qualità finale di una immagine dipende direttamente da un processo di compressione dati, eseguito in diverse fasi:
- color space transform;
- discrete cosine transform;
- quantization.
In particolare, nel processo della quantizzazione, maggiore è la perdita della qualità dell'immagine e più piccolo risulterà il file finale.
Guetzli cerca un buon compromesso ed equilibrio tra la perdita della qualità visuale e la dimensione del file, grazie all'adozione di un algoritmo di ricerca che tenta di superare le differenze tra il modello psico-visuale del formato JPEG e quello di Guetzli, riuscendo ad approssimare in maniera più approfondita e dettagliata la percezione del colore e della maschera visiva.
La figura 1 mostra come il nuovo algoritmo riduce anche gli artefatti, tipici del formato JPEG. A sinistra è raffigurata l'immagine originale dell'occhio di un cane (20x24 pixel). Quella trattata con l'algoritmo Guetzli, sulla destra, è caratterizzata da un numero minore di artefatti rispetto a quella centrale, compressa con libjpeg. Lo si nota soprattutto nell'area chiara superiore e il risultato è ottenuto senza aumentare la dimensione del file.
La stessa riduzione di artefatti si può notare in figura 2, dalla dimensione di 16x16 pixel, con un file finale addirittura più ridotto. La compressione JPEG, è risaputo, soffre di tale aspetto.
Prove pratiche
Sul sito del progetto pubblicato su GitHub, (vedi paragrafo dei link in basso), si possono trovare anche le releases per Windows e Linux, sia a 32 bit che a 64 bit. Si tratta di programmi eseguibili direttamente da terminale, con una sintassi estremamente comprensibile. La semplice esecuzione del software, senza specificare alcun parametro, fornisce il seguente messaggio, come anche riportato in figura 3:
Guetzli JPEG compressor. Usage: guetzli [flags] input_filename output_filename Flags: --verbose - Print a verbose trace of all attempts to standard output. --quality Q - Visual quality to aim for, expressed as a JPEG quality value. --memlimit M - Memory limit in MB. Guetzli will fail if unable to stay under the limit. Default is 6000 MB --nomemlimit - Do not limit memory usage.
dove il parametro:
- --verbose visualizza, a video, i tentativi effettuati dall'algoritmo (vedi figura 4);
- --quality Q specifica la qualità del JPEG finale;
- --memlimit M limita la memoria utilizzata, espressa in Mb;
- --nomemlimit non pone alcun limite alla memoria utilizzata.
Il più semplice esempio di conversione potrebbe essere il seguente:
c:\>guetzli_windows_x86.exe originale.png finale.jpg
che utilizza i parametri di default e genera la nuova immagine compressa dal nome "finale.jpg".
Per specificare la qualità (per esempio 90), invece, si può invocare il seguente comando:
c:\>guetzli_windows_x86.exe --quality 90 originale.png finale.jpg
E' interessante sapere che il programma non accetta un parametro di qualità inferiore a 84. In caso contrario si ottiene il seguente messaggio di errore:
c:\>guetzli_windows_x86.exe --quality 35 originale.png finale.jpg Guetzli should be called with quality >= 84, otherwise the output will have noticeable artifacts. If you want to proceed anyway, please edit the source code. Guetzli processing failed
Sempre sul progetto pubblicato su GitHub si trovano anche i sorgenti dell'encoder che ognuno può scaricare liberamente e compilare.
Note
Nel file "README.md", che consigliamo sempre di leggere, si trovano alcune importanti annotazioni che l'utente dovrebbe ben considerare:
- Guetzli utilizza una grande quantità di memoria. Si consiglia di disporre di almeno 300Mb di memoria per una immagine di 1 megapixel;
- Guetzli utilizza la CPU in modo molto pesante e anche i tempi di elaborazione sono abbastanza significativi. Mediamente, il tempo impiegato per l'elaborazione di una immagine da 1 megapixel si aggira attorno a un minuto;
- Guetzli considera il profilo dell'immagine di input di tipo sRGB con un valore di gamma pari a 2.2;
- Guetzli è stato progettato per lavorare sulle immagini di qualità. Per questo motivo si dovrebbe preferire di passare al programma, come input, delle immagini non compresse o che non siano state già precedentemente elaborate da altri encoder JPEG, Guetzli compreso. Quindi è preferibile operare con delle foto in alta risoluzione di tipo PNG;
- Le immagini di tipo JPEG, come si sa, non sopportano l'alpha channel. Se l'immagine PNG d'input possiede un canale Alpha, esso verrà combinato su uno sfondo nero, prima che il processo di encoding abbia inizio.
Conclusioni
La speranza di Google è quella di agevolare l'intera comunità d'Internet, con navigazioni molto più fluide e veloci. Saranno sicuramente avvantaggiati anche i Web Master e i grafici che vedranno i loro contenuti visionati con una più alta rapidità riducendo, di fatto, l'ammontare delle spese di connessione e i tempi d'attesa. Si augura, principalmente, che tale algoritmo sia un trampolino di lancio per future ricerche su metodi di compressione e di ottimizzazione nell'ambito delle immagini e dei video. Con la riduzione del peso dei dati e l'aumento della banda a disposizione, la navigazione su Internet vedrà un miglioramento sostanziale proprio nei tempi d'attesa.
Link
Penso che algoritmi di questo tipo possano essere molto utili per i dispositivi mobile, dove (a differenza di quanto pubblicizzato dai provider) le velocità di download effettive sono spesso molto distanti da quelle teoriche. Inoltre, su uno schermo da circa 5 pollici è accettabile un degrado dell’immagine, a condizione che si possa fruire di un servizio più veloce e stabile
SI, infatti. Inoltre sto provando in questi giorni l’efficacia di Guetzli e devo dire che, effettivamente, riduce di quel tot. la dimensione dell’immagine, non scendendo la qualità dell’immagine. Una bella cosa per chi progetta siti, rivolti anche ai dispositivi portatili.
Uno dei vantaggi è sicuramente il fatto che Guetzli (curioso il nome!) produce immagini compatibili con tutti i browser però è anche vero che è un encoder per sole jpeg.
Google sempre un passo avanti 🙂 sono convinto (spero) che a breve arriveranno encoder anche per altre tipologie di immagini.