come funziona la compressione jpeg
Come funziona la compressione JPEG
Il JPEG funziona scartando informazione che il tuo occhio fatica a notare. Capire quale informazione spiega perché la qualità 80 sta bene, perché il testo prende gli aloni e perché risalvare corrode.
01
Passo uno: separare luminosità e colore, poi buttare via il colore
L'immagine viene convertita da rosso-verde-blu a un canale di luminosità e due canali di differenza di colore. Questa non è ancora compressione: è una riorganizzazione che separa ciò in cui il tuo occhio è bravo da ciò in cui non lo è.
La vista umana risolve il dettaglio fine molto meglio nella luminosità che nel colore. Il JPEG lo sfrutta subito con il sottocampionamento della crominanza: i canali di colore vengono conservati a metà risoluzione in ciascuna direzione, il che scarta tre quarti dei dati di colore prima che parta qualsiasi matematica raffinata. Su una fotografia è sostanzialmente invisibile.
Su una schermata con testo rosso su bianco è ben visibile, ed è la ragione per cui il testo dentro un JPEG prende frange colorate. Non c'è mai stata abbastanza risoluzione di colore per piazzare un bordo rosso netto.
02
Passo due: trasformare blocchi 8×8 in frequenze
Ogni canale viene tagliato in blocchi di 8×8 pixel, e ogni blocco passa per una trasformata discreta del coseno. L'uscita non sono pixel. Sono 64 coefficienti che descrivono quanto il blocco contiene di ciascuna frequenza spaziale — uno per la luminosità media, poi schemi di variazione via via più fini.
Nella maggior parte dei blocchi del mondo reale l'energia si accumula nei primi coefficienti. Un pezzo di cielo è quasi interamente il suo valore medio, con quantità minuscole di tutto il resto. Questo passaggio è senza perdita e reversibile; non ha risparmiato un byte. Quello che ha fatto è ordinare l'informazione per quanto conta.
03
Passo tre: quantizzazione — è qui che si decide la partita
Ciascuno dei 64 coefficienti viene diviso per un valore preso da una tabella di quantizzazione e arrotondato a intero. I coefficienti piccoli diventano zero. Questo è l'unico passaggio con perdita del JPEG, ed è esattamente ciò che regola il controllo della qualità: qualità 90 usa una tabella morbida, qualità 30 una brutale.
Le tabelle sono fatte per dividere più duramente i coefficienti ad alta frequenza, perché lì sta il dettaglio fine di cui il tuo occhio ha meno probabilità di sentire la mancanza. Dopo la quantizzazione, un blocco tipico che era partito con 64 numeri diversi da zero ne conserva cinque o sei, e il resto sono zeri — e una lunga sequenza di zeri è esattamente ciò che lo stadio finale comprime fino a quasi nulla.
Tutto ciò che la gente nota nel JPEG viene da questo passaggio. L'aspetto a quadretti alle qualità basse sono blocchi di 8×8 i cui coefficienti sono stati appiattiti al punto che i blocchi vicini non si accordano più sul bordo che condividono. L'anellatura intorno al testo sono i coefficienti ad alta frequenza necessari a descrivere un bordo netto quantizzati fino a sparire, lasciando un'increspatura. Entrambi sono l'algoritmo che funziona come progettato su un contenuto per cui non è stato progettato.
- Qualità 90–100
- Quasi senza perdita, e grande. Ha senso solo per immagini che modificherai ancora.
- Qualità 75–85
- Il punto d'equilibrio. In genere un terzo della dimensione di 100 e difficile da distinguere.
- Qualità 50–70
- Visibile se guardi da vicino. Va bene per le miniature, non per niente che contenga testo.
- Sotto 50
- Quadretti e anellatura sono evidenti. Il risparmio rispetto a 75 è molto minore del danno.
04
Passo quattro: impacchettare, senza perdita
I coefficienti quantizzati vengono letti in un ordine a zigzag che va dalla bassa alla alta frequenza, il che raggruppa tutti quegli zeri in un'unica lunga sequenza alla fine. Quella sequenza viene collassata con la codifica a lunghezza di corsa, e il risultato viene codificato entropicamente con la codifica di Huffman.
Questo stadio è completamente senza perdita e di solito rende conto dell'ultimo grande fattore di riduzione. Qui niente degrada l'immagine; è solo impacchettamento efficiente dei numeri lasciati dal passaggio precedente.
05
Perdita di generazione: perché risalvare corrode
Apri un JPEG, non cambiare nulla, risalvalo, e il file non è identico. Decodificare ricostruisce i pixel dai coefficienti quantizzati; ricodificare passa quei pixel ricostruiti per la DCT e quantizza di nuovo. La seconda quantizzazione arrotonda numeri che erano già stati arrotondati, e l'errore si accumula.
Una generazione in più a qualità alta è quasi impercettibile. Dieci sono evidenti — è il meccanismo dietro ogni immagine diventata schermata, salvata e ricondivisa finché non sembra passata per un fax.
La regola pratica scende direttamente da qui. Conserva l'originale. Modifica a partire dall'originale e non da una copia esportata. E quando un file deve diventare più piccolo, ridimensiona prima di ricodificare: ridurre le dimensioni in pixel rimuove dati in modo pulito, mentre abbassare la qualità su pixel a grandezza piena li rimuove in modo distruttivo.
06
Quando il JPEG è la scelta sbagliata
Tutto quanto sopra presuppone contenuto fotografico: gradienti morbidi, nessun bordo netto, nessuna ripetizione esatta. Dai al JPEG l'opposto e ogni scelta progettuale lavora contro di te. Una schermata, un logo, un grafico, un disegno al tratto — sono grandi campiture piatte e confini netti, cioè esattamente il contenuto che il sottocampionamento della crominanza sfoca e la quantizzazione riempie di anelli.
Il PNG è stato fatto per questo caso. Comprime senza perdita prevedendo ogni pixel dai suoi vicini e codificando la differenza, cosa spettacolarmente efficace sul colore piatto e inutile sulle fotografie. La regola è tutta qui: tono continuo al JPEG, colore piatto e bordi netti al PNG, e tutto ciò che ha bisogno di trasparenza deve essere PNG o WEBP, perché il JPEG non ha alcun canale alfa.