La compressione JPEG è un metodo di compressione lossy, ovvero con perdita di informazioni, utilizzato principalmente per immagini fotografiche e grafiche. Parlando di compressione dati, abbiamo messo in evidenza le differenze tra la tecnica lossy e quella lossless: la prima sacrifica una parte dell'informazione con l'obiettivo di ridurre le dimensioni del file o, ad esempio, il "peso" di un flusso dati in streaming; la seconda, invece, è quella che si usa per gestire formati di file come Zip, RAR, 7-Zip e così via, in cui la perdita di informazioni non è un'opzione contemplata.
Il formato JPEG (Joint Photographic Experts Group) è stato sviluppato nel 1992 da un gruppo di lavoro con lo stesso nome. Vista la popolarità dei file JPEG, tuttavia, Google dimostra che c'è ancora margine di miglioramento e a distanza di quasi 32 anni presenta una libreria di codifica avanzata, Jpegli, che ottimizza il rapporto di compressione del 35% senza impattare negativamente sulla resa delle immagini.
Cos'è Jpegli e come migliora la compressione JPEG
I tecnici Google raccontano che Jpegli è una nuova libreria di codifica JPEG progettata per essere più veloce ed efficiente rispetto all'approccio utilizzato dal tradizionale JPEG. Uno degli aspetti principali e maggiormente degni di nota, è che Jpegli conserva massima retrocompatibilità pur offrendo impostazioni di compressione congegnate per immagini di alta qualità.
Quando le immagini sono compresse o decompresse con Jpegli, spiegano gli esperti di Mountain View, appariranno più chiare e con meno artefatti osservabili. Pur migliorando il rapporto qualità/compressione delle immagini, la velocità di codifica di Jpegli è comparabile con quella degli approcci tradizionali, come libjpeg-turbo e MozJPEG. Ciò significa che i web developer possono integrare Jpegli nelle applicazioni e nei flussi di lavoro esistenti senza sacrificare le performance nella codifica o nell'uso della memoria.
10+ bit con Jpegli: cosa significa
Nel presentare Jpegli, Google spiega che le soluzioni di codifica JPEG tradizionali offrono solo 8 bit per componente. L'espressione si riferisce alla quantità di dati utilizzati per rappresentare ciascun componente (ad esempio, rosso, verde, blu) di un'immagine digitale. Maggiore è il numero di bit per componente, maggiore è la gamma di colori e la precisione con cui l'immagine può essere rappresentata.
Jpegli permette di utilizzare 10 bit o più per ciascun componente, consentendo una maggiore gamma di colori e una maggiore fedeltà nella rappresentazione delle immagini.
La codifica a 10 bit o più avviene all'interno del formalismo originale a 8 bit del JPEG. Ciò significa che nonostante il maggior numero di bit per componente, le immagini risultanti sono completamente interoperabili con i visualizzatori a 8 bit. A questo proposito le immagini compresse con Jpegli a 10+ bit possono essere mostrate correttamente anche sui visualizzatori che supportano solo 8 bit per componente, senza perdita di qualità.
La gestione di dinamiche a 10 bit o più è disponibile come estensione API: sono necessarie modifiche al codice dell'applicazione per poterne trarre vantaggio e utilizzare questa caratteristica.
Ridurre il rumore e migliorare la qualità dell'immagine
Jpegli funziona utilizzando una serie di nuove tecniche per ridurre il rumore e migliorare la qualità dell'immagine; principalmente euristiche di quantizzazione adattativa sviluppate a partire dall'implementazione di riferimento di JPEG XL, una selezione migliorata delle matrici di quantizzazione, il calcolo più preciso dei risultati intermedi e la possibilità di utilizzare uno spazio colore più avanzato.
I benchmark eseguiti confermano le prestazioni convincenti di Jpegli che può effettivamente comprimere immagini di alta qualità del 35% in più rispetto ai codec JPEG tradizionali. Per semplificare il confronto dei risultati tra codec e impostazioni, Google spiega di aver aggregato tutte le decisioni assunte dai valutatori utilizzando il punteggio ELO, ispirato al ranking degli scacchi.