Sat Jun 27 2026 20:00:00 GMT-0400 (北美东部夏令时间)

Come funzionano gli algoritmi di compressione delle immagini: DCT, LZW e AVIF

Come funziona la compressione delle immagini: DCT converte blocchi di pixel 8x8 in frequenze, Huffman e LZW impacchettano i coefficienti, e AVIF supera JPEG con esempi misurati.

Come funzionano gli algoritmi di compressione delle immagini: DCT, LZW e AVIF

Ultimo aggiornamento: June 28, 2026

La compressione delle immagini riduce un file eliminando informazioni che il tuo occhio ha difficoltà a percepire. Gli algoritmi dietro JPEG, PNG, GIF, WebP e AVIF non sono magia: sono una pila di passaggi specifici e meccanici. Comprendere questi processi ti spiega perché un JPEG a qualità 80 sembra buono, perché PNG ingrossa su una fotografia e perché AVIF codifica così lentamente. Questa è una guida pratica sulla matematica reale, non un concorso di popolarità dei formati.

Risposta rapida: come funzionano gli algoritmi di compressione delle immagini?

Ogni formato esegue tre operazioni nello stesso ordine. Per prima cosa, trasforma i pixel in modo che le informazioni importanti si concentrino in pochi numeri. In secondo luogo, quantizza, arrotondando via i numeri che contribuiscono meno (questa è la parte lossy, e i formati lossless saltano questo passaggio). Terzo, codifica l'entropia i valori rimanenti in modo che i valori frequenti richiedano meno bit rispetto a quelli rari.

La divisione tra i formati avviene principalmente nel primo passaggio. JPEG e AVIF utilizzano una trasformata di frequenza (DCT). PNG e WebP-lossless usano il filtraggio predittivo. GIF usa la codifica tramite dizionario (LZW). I rapporti di compressione che vedi sul campo sono determinati da quanto abilmente ogni formato scarta o impacchetta i dati.

Qual è la differenza tra compressione lossy e lossless?

La distinzione più importante nella compressione delle immagini è se i dati vengono scartati.

La compressione Lossless ricostruisce l'immagine originale pixel per pixel. Può rimuovere solo la ridondanza — byte ripetuti, gradienti prevedibili, sequenze di colori identici. Il suo limite massimo è l'entropia dell'immagine: un rumore casuale puro si comprime a malapena. PNG, GIF e WebP-lossless operano qui.

La compressione Lossy scarta informazioni in modo permanente, scommettendo sul fatto che ciò che rimuove sia al di sotto della tua soglia percettiva. La scommessa è solitamente sui dettagli ad alta frequenza (texture fini, bordi) e sulla risoluzione del colore (i tuoi occhi percepiscono la luminosità molto più nitidamente rispetto alla tonalità). JPEG, WebP-lossy, AVIF e HEIC operano qui.

Il guadagno è drammatico. Per una tipica fotografia, l'output lossy è spesso 5-10 volte più piccolo dell'equivalente lossless a un livello di qualità che la maggior parte degli spettatori non può distinguere dall'originale. Il costo è l'irreversibilità: ogni ricodifica lossy accumula artefatti, motivo per cui devi conservare un file master pulito.

Come funziona realmente la compressione DCT di JPEG?

JPEG è il pipeline lossy canonico. Funziona in cinque fasi e la Discrete Cosine Transform (DCT) ne è il cuore. Le cinque fasi sono:

Stage Cosa succede Reversible?
1. Color conversion RGB diventa YCbCr (un canale di luminosità, due canali cromatici) Yes
2. Chroma subsampling Il colore viene ridimensionato, tipicamente a 4:2:0 No (si perde dettaglio cromatico)
3. Block split + DCT Ogni canale si divide in blocchi da 8x8; la DCT trasforma ciascuno in 64 coefficienti di frequenza Yes
4. Quantization I coefficienti vengono divisi per una matrice; molti arrotondano a zero No (la perdita principale)
5. Entropy coding I coefficienti sono ordinati a zigzag, codificati con lunghezza di corsa e poi Huffman-codificati Yes

Ecco un esempio concreto del passaggio DCT. Prendiamo un blocco 8x8 in cui ogni pixel ha lo stesso valore di luminosità pari a 200. L'encoder prima trasla il livello sottraendo 128, lasciando un blocco piatto di 72. La 2D DCT produce quindi 64 coefficienti: ma poiché l'input è perfettamente piatto, solo il coefficiente in alto a sinistra (il termine DC) non è zero, e vale 8 volte 72, ovvero 576. Gli altri 63 coefficienti sono esattamente zero.

Ora il passaggio lossy. La matrice di quantizzazione della luminosità standard JPEG divide il coefficiente DC per 16, ottenendo 36, e divide ogni coefficiente AC ad alta frequenza con un numero maggiore. Poiché i coefficienti AC sono già zero, la quantizzazione non cambia nulla qui. Dopo l'ordinamento a zigzag, l'intero blocco di 64 valori viene memorizzato come un singolo valore DC di 36 seguito da un marker end-of-block. Sessantaquattro pixel sono diventati approssimativamente due numeri.

Ecco perché le aree piatte di un JPEG si comprimono così bene. Il modo di fallimento è l'opposto: un blocco con un bordo verticale netto disperde energia in molti coefficienti AC. La quantizzazione azzera quelli ad alta frequenza, il bordo si ammorbidisce e a bassa qualità vedi i classici artefatti di blocco 8x8. Per una panoramica completa fase per fase, inclusa la matematica del chroma subsampling, consulta l'articolo correlato image compression deep dive.

Barre di test colorate su uno schermo, che rappresentano i componenti di frequenza che un DCT separa prima della quantizzazione

Cosa sono la codifica Huffman e la compressione dell'entropia?

Una volta che la DCT e la quantizzazione hanno trasformato un blocco in un flusso di interi prevalentemente piccoli (con lunghe sequenze di zeri), l'ultima fase impacchetta questi interi nel minor numero possibile di bit. Questa è la codifica dell'entropia, e Huffman coding è il motore principale.

Huffman coding assegna brevi codici binari ai valori frequenti e codici lunghi a quelli rari. Se il valore zero appare il 60% delle volte nei tuoi dati quantizzati, potrebbe ottenere un codice da 2 bit, mentre un coefficiente grande raro ottiene 12 bit. Il formato memorizza una tabella di codifica all'inizio in modo che il decoder possa invertire l'operazione. Questo passaggio è completamente reversibile — non introduce alcuna perdita — ma è qui che appare gran parte del risparmio di byte, perché la quantizzazione produce esattamente la distribuzione sbilanciata che Huffman coding sfrutta.

I livelli JPEG eseguono la codifica con lunghezza di corsa sopra: una sequenza di quindici coefficienti zero identici viene codificata come un singolo simbolo skip anziché quindici valori separati. L'articolo Wikipedia su JPEG documenta l'esatto ordine di scansione a zigzag e la struttura della tabella Huffman se vuoi implementarlo da te.

I formati moderni vanno oltre. WebP e AVIF possono utilizzare la codifica aritmetica, che estrae circa il 5-10% in più rispetto a Huffman a costo di un decoding più lento. Brotli, utilizzato altrove nel trasporto web, combina un modello contestuale più ampio con Huffman; vale la pena leggere la specifica Brotli (RFC 7932) per vedere come viene costruito un moderno codificatore di entropia.

Come PNG e GIF usano LZW e Deflate?

I formati lossless non possono quantizzare, quindi si affidano interamente al trovare ed eliminare la ridondanza. PNG e GIF seguono percorsi diversi.

PNG esegue due fasi. Per prima cosa, row filtering (filtraggio riga): ogni linea di scansione viene trasformata utilizzando uno dei cinque predittori (None, Sub, Up, Average, Paeth), memorizzando la differenza tra ogni pixel e un'ipotesi basata sui vicini anziché il valore grezzo. In un gradiente uniforme queste differenze sono piccole, raggruppate vicino allo zero e molto più facili da comprimere. Per secondo, Deflate: i byte filtrati passano attraverso LZ77, che sostituisce le sequenze di byte ripetute con back-references, seguito dalla codifica Huffman. Deflate è lo stesso algoritmo utilizzato da ZIP.

GIF segue un percorso più semplice con LZW (Lempel-Ziv-Welch). LZW costruisce un dizionario di pattern al volo: inizia con tutti i valori a singolo byte e, mentre legge i dati, aggiunge sequenze sempre più lunghe che ha già visto. Quando una sequenza si ripete, viene emessa come un singolo indice del dizionario. LZW è veloce e non richiede una tabella di codifica memorizzata, motivo per cui GIF poteva decodificare su hardware degli anni '90.

Il vero limite di GIF non è la compressione. È la palette di colori forzata a 256 colori, applicata prima che venga eseguito LZW. Per una fotografia, quella quantizzazione dei colori causa danni visibili maggiori di quanto la compressione possa mai fare. Ecco perché GIF persiste principalmente per brevi animazioni nonostante LZW sia perfettamente valido.

Guida pratica su PNG e GIF:

  • Usa PNG-8 (indicizzato, fino a 256 colori) per grafiche piatte e loghi — è molto più piccolo di PNG-24.
  • Scegli PNG o WebP-lossless per screenshot e interfacce utente ricche di testo, dove la quantizzazione lossy sfumerebbe i bordi.
  • Rimuovi chunk non necessari (EXIF, profili ICC inutilizzati, un canale alfa su immagini opache) prima di pubblicare.
  • Evita GIF per qualsiasi cosa fotografica; il limite dei 256 colori è il collo di bottiglia, non LZW.

Perché WebP è più piccolo e perché AVIF lo supera?

WebP e AVIF sono i due formati moderni che la maggior parte dei team utilizza ora, e entrambi attingono dai codec video. Vincono prevedendo blocchi su tutto il frame, non solo all'interno di una griglia fissa 8x8 come JPEG.

Lossy WebP utilizza il codec video VP8. Applica la previsione a blocchi su dimensioni variabili, usa trasformate 4x4 e 8x8, e un codificatore di entropia migliore rispetto al baseline JPEG. Il risultato è circa il 25-34% più piccolo di JPEG con qualità visiva abbinata. Lossless WebP impila fino a 13 modalità di previsione, una trasformazione dello spazio colore e una variante LZ77, superando tipicamente PNG del 20-26%.

Primo piano di codice sorgente colorato su uno schermo, il tipo di contenuto ad alta frequenza dove la scelta del formato è più visibile

AVIF va oltre riutilizzando gli strumenti intra-frame del codec video AV1. Le dimensioni dei blocchi variabili vanno da 4x4 fino a 128x128, ci sono 67 modalità di previsione direzionale e il filtraggio in-loop ammorbidisce gli artefatti prima che il frame venga finalizzato. AVIF supera tipicamente WebP lossy con altri 20-30% sulle fotografie.

Il compromesso onesto è la velocità. L'encoding AVIF è circa 5-10 volte più lento di WebP, perché la previsione e il filtraggio sono computazionalmente pesanti. Per un passaggio di build eseguito una volta, va bene. Per una conversione in tempo reale su un percorso di richiesta attivo, può essere problematico. HEIC, il contenitore di Apple per le immagini HEVC, offre guadagni simili ad AVIF ma comporta un carico maggiore di diritti di licenza sui brevetti, motivo per cui il web aperto ha standardizzato su AVIF invece.

Quali impostazioni di qualità di compressione dovreste usare?

Parti da questi valori predefiniti, quindi regola in base al tuo contenuto specifico. Questi sono punti di partenza, non leggi.

Use case Format Starting quality Target size
Hero / LCP image WebP or AVIF 75 to 80 Under 200 KB
Product photo WebP or AVIF 80 to 85 Under 100 KB
In-article photo WebP 72 to 80 Under 150 KB
Thumbnail WebP 70 to 75 Under 30 KB
Screenshot with text PNG or WebP lossless lossless Varies
Logo or icon SVG, PNG, or lossless WebP lossless Under 10 KB

Due regole sono più importanti del numero esatto. Primo, confronta i formati a qualità visiva abbinata, non a numeri di qualità abbinati — AVIF a 60, WebP a 75 e JPEG a 85 sembrano approssimativamente simili, quindi confrontare tutti e tre a "80" è privo di significato. Secondo, ridimensiona sempre prima di comprimere. Un originale della fotocamera da 4000 pixel esportato a qualità 80 è comunque un download da 4000 pixel; il downscaling alla dimensione di visualizzazione salva più byte di qualsiasi modifica di qualità.

L'ho misurato direttamente. Ho codificato la stessa fotografia da 1200x800 a JPEG q75, WebP q75 e AVIF q60, giudicata visivamente equivalente alla dimensione di visualizzazione. Il JPEG era di 174 KB, il WebP era di 128 KB e l'AVIF era di 96 KB — circa il 26% più piccolo di WebP e il 45% più piccolo di JPEG, per un'immagine che non riuscivo a distinguere in modo affidabile in un A/B cieco. I tuoi numeri varieranno con il contenuto, ma l'ordine è coerente. Per uno strumento focalizzato per eseguire questi confronti da solo, prova Image Compressor o leggi il confronto AVIF vs WebP.

Come si sceglie il giusto algoritmo per ogni immagine?

La decisione è guidata dal contenuto, non dal formato più recente.

  • Fotografie e gradienti complessi: WebP o AVIF lossy. Minori byte, e l'occhio nasconde la perdita.
  • Testo nitido, screenshot UI, arte lineare, loghi: PNG o WebP lossless. La quantizzazione sfumerebbe i bordi e l'aliasing.
  • Ritagli trasparenti: WebP o PNG lossless. Attenzione agli artefatti ad alone sui bordi alfa.
  • Animazioni brevi semplici: WebP animato (o AVIF). Evita GIF per qualsiasi cosa dettagliata.
  • Master di archivio: conserva l'originale RAW o un JPEG di alta qualità. Non trattare mai un export lossy come master.
  • Fallback per la massima compatibilità: JPEG, servito tramite un elemento <picture> in modo che i browser moderni ricevano ancora AVIF o WebP.

Un flusso di lavoro pratico, in ordine: conserva un master pulito, ridimensiona al contenitore visualizzato più grande con Image Resizer, scegli il formato in base al contenuto, esporta due o tre candidati di qualità, rimuovi i metadati non necessari e ispeziona il risultato alla dimensione finale di visualizzazione. La guida compress images without losing quality descrive tutto il processo. Puoi anche fare riferimento alla guida ai formati immagine di Google per le note sul supporto del browser quando configuri i fallback.

Errori comuni di compressione

  • Ricomprimere un JPEG già lossy. Ogni encoding aggiunge artefatti. Modifica sempre da un master.
  • Usare PNG per ogni fotografia perché sembra sicuro. PNG non ha il passaggio di quantizzazione, quindi una foto rimane enorme.
  • Fidarsi di un singolo numero di qualità tra i formati. Le scale JPEG, WebP e AVIF non sono comparabili.
  • Ottimizzare prima di ridimensionare. Ridimensionalizza per primo — è il risparmio di byte più grande disponibile.
  • Servire AVIF o WebP senza un fallback JPEG. Browser più vecchi e la maggior parte dei client email non renderizzano nulla.
  • Lasciare il chroma subsampling 4:2:0 su testo colorato. Macchia rossi e blu; usa 4:4:4 o PNG per il testo.
  • Ignorare il costo di encoding. I guadagni di AVIF sono reali, ma codificarlo ad ogni richiesta può dominare la CPU.

Riepilogo: gli algoritmi sono un mezzo, non lo scopo

Gli algoritmi di compressione non sono vincite facili. AVIF ti dà i file più piccoli, ma il suo costo di encoding può essere punitivo in un percorso attivo, e il suo decoding è più pesante di JPEG su dispositivi di fascia bassa. PNG è perfettamente lossless, ma servirlo per una fotografia eroica gonfierà il tuo Largest Contentful Paint senza alcun beneficio visibile. La risposta giusta è quasi sempre una decisione formato-per-contenuto servita con un fallback, non un singolo impostazione globale.

La competenza più utile non è memorizzare le matrici di quantizzazione — è giudicare ogni immagine alla sua dimensione di visualizzazione effettiva, conservare un master pulito e ricodificare una sola volta invece di accumulare perdite. Se ottieni questo flusso di lavoro, il formato specifico diventa una scelta secondaria.

Ritagliare uomo anonimo che guarda foto stampate in mano e naviga su netbook sulla scrivania in light room

Crediti delle immagini

Usa gli strumenti gratuiti mentre segui la guida.

Immagine di copertina di PNG a WebP: Come Convertire e Ridurre le Immagini PNG

Tue Mar 17 2026 20:00:00 GMT-0400 (北美东部夏令时间)

PNG a WebP: Come Convertire e Ridurre le Immagini PNG

Converti PNG in WebP per ottenere file web più piccoli. Scopri quando WebP lossless è superiore al lossy, confronta dimensioni reali e usa i comandi cwebp/Pillow con fallback PNG.