Lo slider della qualità JPEG non è una percentuale! Qual è davvero la differenza tra 80 e 100

Quando esporti un’immagine, quello slider della qualità JPEG lo hai sempre usato come se fosse una percentuale? Lo trascini a 80 e pensi: «ho salvato l’80% della qualità»; lo porti a 100 e pensi: «così non si perde nulla».

Questa convinzione va ribaltata del tutto: il numero sullo slider non ha nulla a che vedere con la «percentuale di qualità», e qualità 100 non significa «senza perdita». Prima le conclusioni pratiche da usare subito: per archiviare le foto senza preoccupazioni, usa 85–92; per web e social, 75–82 è sufficiente; non impostare 100 come predefinito: fa solo raddoppiare o addirittura triplicare la dimensione del file, senza aggiungere qualità. Ora smontiamo lo slider e vediamo com’è fatto dentro.

In una frase: lo slider della qualità JPEG non controlla «quanta qualità conservare», ma quanto sono aggressivi i divisori nella tabella di quantizzazione: più grandi sono i divisori, più aggressivo è l’arrotondamento e più informazioni si perdono. Non è una relazione lineare né con la qualità né con la dimensione del file: il passaggio da 100 a 90 non equivale a quello da 20 a 10.

Che cosa fa esattamente lo slider della qualità JPEG

Partiamo da una premessa: JPEG è un formato con perdita; dal momento in cui premi Salva, l’immagine comincia subito a perdere qualcosa. Lo slider decide solo «quanto aggressivamente» perde, non «se» perde. Il modo in cui perde segue un processo fisso, e lo slider è l’ultimo snodo di questa catena di montaggio.

Al salvataggio, l’immagine viene prima convertita da RGB a YCbCr, separando luminanza e colore. Questo perché l’occhio umano è molto più sensibile alla luminosità che al colore: separandole, poi è più facile proteggere soprattutto la luminosità.

Poi l’intera immagine viene divisa in blocchi di 8×8 pixel e ogni blocco viene sottoposto a una trasformata discreta del coseno (DCT), che converte i colori dei pixel in una serie di valori di frequenza. È paragonabile a scomporre un accordo nelle singole note: le basse frequenze sono il colore di fondo e le sfumature, le alte frequenze sono i bordi netti e le texture fini. La versione completa di questo processo è descritta molto bene nella voce JPEG di Wikipedia.

Il vero colpo di grazia arriva all’ultimo passaggio: ogni valore di frequenza viene diviso per un numero della tabella di quantizzazione (Quantization Table) e poi arrotondato all’intero. L’arrotondamento è il punto in cui l’informazione muore per sempre: la parte decimale (il resto della divisione) viene scartata e non torna più. Lo slider della qualità controlla proprio quanto sono aggressivi questi divisori: a valore alto dello slider corrispondono divisori piccoli, con un arrotondamento che quasi non danneggia i dati; a valore basso corrispondono divisori grandi, con un arrotondamento che cancella direttamente i dettagli. Inoltre i divisori delle componenti ad alta frequenza crescono più in fretta, quindi a essere sacrificati per primi sono sempre bordi e texture fini.

Ecco perché non può essere una percentuale. Passare da 100 a 90 e passare da 20 a 10 sono due cose completamente diverse: cambiano i divisori, e cambiano completamente sia la resa qualitativa sia la dimensione del file. Vicino a 90 puoi spostare di una tacca senza accorgertene; vicino a 20, una tacca e l’immagine è rovinata. Intenderlo come percentuale è l’equivoco più comune e più costoso su questo controllo.

Perché qualità 100 non è senza perdita

Risposta breve: 100 è ancora lontano dall’essere senza perdita a causa di due limiti strutturali: uno non dipende dallo slider, sull’altro non c’è slider che tenga.

Il primo è il sottocampionamento della crominanza (chroma subsampling). Dopo la conversione da RGB a YCbCr e prima che la compressione vera e propria inizi, la maggior parte degli encoder scarta già circa il 75% dei dettagli di crominanza, sempre per lo stesso motivo: l’occhio umano è poco sensibile al colore e non se ne accorge. Questo passaggio non è affatto controllato dallo slider: anche se imposti 100, viene eseguito lo stesso.

Il secondo è che la matematica stessa non è esatta. Anche portando al minimo i divisori della tabella di quantizzazione, nel percorso «pixel → frequenze → di nuovo pixel» restano piccoli errori di arrotondamento. Una volta aperto, il file salvato non contiene più gli stessi pixel che avevi quando hai premuto Salva.

Se vuoi davvero non perdere nemmeno un bit, scegli la strada senza perdita: PNG, TIFF o WebP in modalità senza perdita. La compressione con perdita è una strada a senso unico: vale per qualsiasi livello JPEG, incluso quel 100 che sembra «perfetto».

85–92 e 75–82: come scegliere

Moltissimi test pratici e confronti a livello di pixel convergono su una distinzione molto chiara: due fasce che coprono quasi tutte le situazioni.

85–92 è la fascia di conservazione. Portfolio, scatti da consegnare al cliente, quegli originali che non vuoi toccare: mettili qui. Un file salvato a qualità 90 occupa circa da 1/8 a 1/12 dello spazio del file non compresso, e la differenza è invisibile a occhio nudo: devi ingrandire al 400% e fissare una piccola area, solo così riesci a notare la differenza.

75–82 è la fascia web. Immagini per siti, upload sui social: usa questa. I file sono ancora dal 40% al 60% più piccoli rispetto alla fascia di conservazione; il prezzo è soprattutto una leggera morbidezza nelle texture complesse, quasi impercettibile a dimensioni normali.

Se hai letto l’articolo precedente «Con perdita e senza perdita», la fascia ideale 80–85 che indicavo non è in conflitto con queste due fasce: intorno a 80 si è già nella fascia web, 85 entra proprio nella fascia di conservazione; le immagini già salvate a 80–85 non devono essere ricompresse.

Riassumendo i tre livelli in una frase: ciò che vuoi conservare va a 85–92, ciò che pubblichi va a 75–82, sotto 60 è zona minata: girarci alla larga.

Lo stesso ritaglio della stessa foto esportato a qualità JPEG 90, 75 e 35: 90 e 75 sono indistinguibili, 35 è visibilmente sfocato e a blocchi
Lo stesso ritaglio, tre esportazioni reali: la qualità 90 pesa 102 KB, la qualità 75 solo 62 KB – quasi il 40% in meno senza differenze visibili. Nella zona di crollo, a 35, il file si riduce di altri 28 KB, ma l’immagine diventa sfocata e a blocchi.

Impostare 100 come predefinito per l’esportazione è dettato dall’ansia, non dalla strategia. Un file a qualità 85 è dal 60% al 75% più piccolo di quello a qualità 100, ma non si vede alcuna differenza di qualità; per il web significa allungare inutilmente i tempi di caricamento. I conti delle immagini per il web li ho fatti nel dettaglio nell’articolo sulla velocizzazione delle immagini web.

Perché sotto qualità 60 crolla tutto

Scendendo sotto 60, la qualità non è una discesa graduale: precipita.

La causa è ancora l’arrotondamento. Quando il valore è troppo basso, i divisori delle componenti ad alta frequenza diventano assurdamente grandi: un valore di frequenza, dopo la divisione e l’arrotondamento, va direttamente a zero: quel dettaglio, in pratica, non è stato salvato. Così intere categorie di informazioni visive spariscono in blocco: capelli, trame dei tessuti, estremità dei tratti dei caratteri con grazie (serif) sono tra i primi a sparire.

Ciò che resta sono i tipici artefatti JPEG: blocchi 8×8, banding nei gradienti, aloni (ringing) e rumore mosquito (mosquito noise) lungo i bordi netti. Le forme grandi ci sono ancora, ma non è più un’immagine che valga la pena di guardare. Ho scritto un articolo illustrato separato su come nasce ogni tipo di artefatto.

Primo piano della qualità JPEG 90 a confronto con la qualità 30: il lato a bassa qualità mostra raggi sfocati, un muro di mattoni dissolto in blocchi e un cielo macchiato
Cosa succede sotto 60: le due righe mostrano la stessa posizione ingrandita 3 volte, a sinistra qualità 90, a destra qualità 30. Riga superiore – raggi e muro di mattoni: le linee sottili spariscono per prime, le giunture si dissolvono in blocchi. Riga inferiore – cielo e bordo del muro: le sfumature si macchiano e i bordi si sfrangiano.

Quindi la mia conclusione è: 60 è il limite pratico inferiore per le immagini normali. I pochi KB risparmiati scendendo ancora si pagano con un risultato che si riconosce come finto a colpo d’occhio, e non ne vale la pena.

A parità di qualità 90, software diversi esportano cose diverse

La «qualità 90» non è una valuta universale. Lo standard JPEG fornisce una serie di tabelle di quantizzazione di esempio (Annex K), ma quale tabella usare e come scalarla è una scelta di ciascun software. Anche a parità di «alta qualità», quattro strumenti comuni assegnano numeri completamente diversi: la scala di Photoshop è 0–12, e il suo 10 equivale all’incirca al 90 di libjpeg; GIMP e ImageMagick usano entrambi una scala 1–100, con GIMP che adotta 85 per il livello «alta qualità» e ImageMagick che usa 92; libjpeg, che è l’implementazione di riferimento, adotta 90.

Anche impostando «qualità 85» in due strumenti, i file esportati non saranno uguali. Quindi non memorizzare un numero in un software e riutilizzarlo tal quale in un altro. Per confrontare software e progetti diversi, gli unici metodi affidabili sono due: guardare la dimensione effettiva dell’output e il risultato visivo reale.

Un metro più affidabile dell’occhio: SSIM

Lo slider non è affidabile e l’occhio è influenzato dallo schermo e dalle condizioni di visione: si può quantificare il «non vedo differenze»? Sì, con un metodo molto più affidabile: l’indice di similarità strutturale (SSIM, Structural Similarity Index Measure).

Non confronta i pixel uno per uno, ma osserva quanto sono cambiate la struttura, la luminosità e il contrasto; è più vicino a come l’occhio umano giudica un’immagine rispetto a «contare quanti pixel sono diversi». Il punteggio va da 0 a 1; 1 significa che le due immagini sono identiche. La formula e le origini sono spiegate chiaramente nella voce SSIM di Wikipedia.

Per i comuni livelli di qualità, l’SSIM è all’incirca questo: un file a qualità 85 ottiene di solito un punteggio superiore a 0,97 ed è visivamente indistinguibile dall’originale; scendendo a 60 il punteggio si assesta su 0,90–0,93: l’immagine è leggermente più morbida e la differenza si nota solo ingrandendo; a 40 si assesta su 0,82–0,87 e gli artefatti sono ormai visibili a occhio nudo.

Questi numeri sono molto più onesti dello slider. Per determinare la qualità senza affidarsi all’intuito, puoi usare il comando compare di ImageMagick per calcolare direttamente l’SSIM di due immagini e trovare il punto che «riduce al massimo la dimensione senza scendere sotto la soglia percettiva di 0,85». L’uso di questo metro l’ho descritto in un approfondimento dedicato all’SSIM.

Prova tu stesso: slider, SSIM e qualità ottimale

Il piccolo strumento qui sotto funziona interamente nel tuo browser – le immagini non vengono mai caricate. Scegli un’immagine (oppure clicca su «Prova l’immagine di esempio»), muovi lo slider e osserva come cambiano la dimensione compressa e l’SSIM; puoi anche cercare automaticamente l’impostazione più leggera con SSIM ≥ 0,85. Il valore di SSIM viene calcolato in tempo reale sull’immagine appena compressa – esattamente il metro della sezione precedente.

Originale
Compressa (qualità attuale)
Differenza (dettagli scartati)
Dimensione: —
SSIM: —
—
Zoom originale/compressa
Amplificazione della differenza Bianco = dettagli scartati; più chiaro = più perdita
Convertitore di qualità tra software (ogni strumento ha i suoi numeri – non copiarli tal quali)

Nota: gli encoder JPEG nativi dei browser non espongono né il sottocampionamento della crominanza né le tabelle di quantizzazione. Per questo lo strumento mostra l’effetto reale dello slider e quantifica la differenza con l’SSIM, invece di rendere modificabile l’encoder – e conferma esattamente ciò che dice questo articolo: la qualità 100 non è senza perdita, e lo stesso numero non significa la stessa cosa in software diversi.

Domande frequenti

Meglio impostare la qualità JPEG a 80 o a 100?

Nella grande maggioranza dei casi, un valore intorno a 80 è sufficiente; 100 non dovrebbe essere il valore predefinito. Un file a qualità 85 è dal 60% al 75% più piccolo di quello a qualità 100, ma a occhio nudo non si vede alcuna differenza; per le foto da tenere al sicuro usa 85–92, per web e social 75–82 basta, sotto 60 compaiono artefatti evidenti.

La qualità JPEG 100 è senza perdita?

No. Anche portandola al massimo, il JPEG di solito perde prima circa il 75% dei dettagli di colore nel sottocampionamento della crominanza, e poi subisce perdite irreversibili per quantizzazione e arrotondamento. Per essere senza perdita, usa PNG, TIFF o WebP in modalità senza perdita.

Perché in Photoshop non trovo qualità 85?

La scala di qualità JPEG di Photoshop è 0–12, non 1–100; il suo 10 equivale all’incirca al 90 di libjpeg. Software diversi mappano lo stesso numero in modo diverso: non copiare i numeri da un software all’altro, ma basati sulla dimensione effettiva dell’output e sul risultato visivo.

Come capire se dopo la compressione la qualità di un’immagine è peggiorata in modo evidente?

Il confronto più diretto è ingrandire e confrontare con l’originale; per un indicatore oggettivo usa l’SSIM. Un JPEG a qualità 85 ha di solito SSIM superiore a 0,97 ed è visivamente indistinguibile dall’originale; intorno a 40 scende a 0,82–0,87 e gli artefatti sono visibili a occhio nudo. Il comando compare di ImageMagick può calcolare direttamente questo punteggio.

Conclusione

Il numero sullo slider è il parametro che regola i divisori della tabella di quantizzazione, non una percentuale di qualità; 100 non è senza perdita, sotto 60 è un precipizio. Se vuoi una regola pratica: salva le foto a 85, quelle per il web a 80, 100 non serve da nessuna parte: il file raddoppia, la qualità non sale di un punto.

Se vuoi passare dalla scelta del formato e dal ridimensionamento alla regolazione della qualità e alla velocizzazione per il web, leggi la Guida completa alla compressione delle immagini: tutta la catena è in quell’articolo.