Vai al contenuto
PDFLove

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.

Domande

Domande collegate

Perché il testo viene male in un JPEG?

Due meccanismi si sommano. Il sottocampionamento della crominanza dimezza la risoluzione di colore prima di qualsiasi altra cosa, e la quantizzazione scarta i coefficienti ad alta frequenza di cui è fatto un bordo netto. Il testo è solo bordo netto, quindi le prende entrambe — frange colorate e un'increspatura intorno a ogni lettera.

Cosa significa davvero il numero di qualità del JPEG?

Seleziona una tabella di quantizzazione. Una qualità più alta divide i coefficienti per numeri più piccoli, quindi meno di essi vengono arrotondati a zero e sopravvive più dettaglio. Non è la percentuale di nulla, ed è per questo che la differenza tra 100 e 90 è trascurabile mentre quella tra 60 e 50 non lo è.

Posso recuperare la qualità di un JPEG compresso troppo?

No. La quantizzazione arrotonda i coefficienti a zero e non resta traccia di cosa fossero. Salvarlo poi a qualità 100 produce un file più grande con esattamente lo stesso danno.

Il WEBP è solo un JPEG migliore?

Per le fotografie con perdita risulta dal 25 al 35% più piccolo a qualità equivalente, e in più fa senza perdita e trasparenza, cosa che il JPEG non fa. Il problema è l'accettazione: molti moduli di caricamento e programmi datati accettano ancora solo JPEG e PNG.