Come ridurre le dimensioni di un file PNG: 5 metodi
- Riduci le dimensioni. Il peso del file segue il numero di pixel, quindi dimezzando larghezza e altezza resta circa un quarto dei dati.
- Riduci i colori a una palette a 8 bit. Strumenti come pngquant tagliano spesso dal 60 all'80% con differenze minime sulle grafiche.
- Rimuovi i metadati. Blocchi di testo, profili ICC e dati degli editor possono arrivare a centinaia di kilobyte.
- Usa la compressione massima. Il livello 9 con filtro adattivo fa risparmiare qualche punto percentuale in più senza perdita di qualità.
- Converti le foto in JPG. Se il PNG è una fotografia e non ti serve la trasparenza, il JPG è di solito da 5 a 10 volte più piccolo.
La compressione PNG è per sua natura senza perdita
Questa è la cosa più importante da capire sul PNG: il livello di compressione non influisce sulla qualità. Un PNG salvato con livello di compressione 1 e uno salvato con livello 9 mostrano esattamente la stessa immagine quando vengono aperti. Ogni singolo pixel è identico, bit per bit.
Il PNG usa l'algoritmo DEFLATE (lo stesso di gzip e dei file ZIP) per comprimere i dati dei pixel. Quando regoli il "livello" di compressione, stabilisci con quanto impegno l'encoder cerca schemi ripetuti e strategie di codifica ottimali. Livelli più alti significano:
- File più piccoli — l'encoder trova modi più efficienti per rappresentare gli stessi dati
- Codifica più lenta — servono più calcoli per trovare queste ottimizzazioni
- Decompressione identica — qualunque sia il livello, i pixel decodificati sono gli stessi
È una differenza sostanziale rispetto al JPEG, dove l'impostazione di qualità determina direttamente quanti dati visivi vengono scartati per sempre. Con il PNG non si scarta mai nulla. La domanda sulla "qualità" diventa semplicemente: quanto tempo di CPU sei disposto a spendere per risparmiare qualche byte in più?
Concetto chiave: livello di compressione PNG = impegno di codifica, non qualità. Il livello 9 non significa "qualità inferiore" — significa "impegnati di più per trovare una rappresentazione più compatta degli stessi dati".
PNG-8 vs PNG-24 vs PNG-32
Il modo più efficace per ridurre le dimensioni di un PNG è scegliere il sottotipo PNG giusto per l'immagine. La differenza tra questi tipi può significare una riduzione di 3–5 volte con cambiamenti visibili minimi o nulli.
| Tipo | Profondità colore | Colori | Trasparenza | Dimensione tipica |
|---|---|---|---|---|
| PNG-8 | 8 bit (palette indicizzata) | Fino a 256 | 1 bit (sì/no) o alfa a 8 bit | La più piccola |
| PNG-24 | 24 bit (RGB) | 16,7 milioni | Nessuna | Media |
| PNG-32 | 32 bit (RGBA) | 16,7 milioni | Alfa completo a 8 bit | La più grande |
PNG-8: l'arma segreta per file leggeri
Il PNG-8 memorizza ogni pixel come indice in una palette di massimo 256 colori. Invece di 3 byte per pixel (RGB) o 4 byte (RGBA), ne usa appena 1. Questa differenza di fondo rende i file PNG-8 3–5 volte più piccoli degli equivalenti PNG-24.
Il PNG-8 è ideale per:
- Loghi — la maggior parte dei loghi usa meno di 20 colori
- Icone ed elementi dell'interfaccia — le icone in flat design hanno di solito 5–15 colori
- Illustrazioni semplici — diagrammi, grafici, infografiche con aree di colore uniforme
- Screenshot di interfacce ricche di testo — output del terminale, editor di codice, documenti di testo
Il PNG-8 non è adatto per:
- Fotografie — le foto contengono migliaia di colori; ridurli a 256 provoca bande visibili
- Sfumature morbide — 256 colori non bastano a rappresentare una sfumatura uniforme senza gradini visibili
- Immagini con semitrasparenza — il PNG-8 può memorizzare un valore alfa per ogni colore della palette, ma bordi morbidi e ombre richiedono spesso più combinazioni di colore e alfa di quante ne consentano 256 voci
PNG-24 vs PNG-32: ti serve il canale alfa?
La differenza tra PNG-24 e PNG-32 è il canale alfa (trasparenza). Ogni pixel di un PNG-32 contiene un byte in più per la trasparenza, quindi i file sono più grandi del 25–33% rispetto al PNG-24. Se l'immagine non ha bisogno di trasparenza (nessuna area trasparente o semitrasparente), salvala come PNG-24 per evitare il peso di un canale alfa inutilizzato.
Risultato rapido: se hai un'immagine PNG-24 che usa solo 50 colori distinti (frequente in mockup di interfacce e diagrammi), convertirla in PNG-8 può ridurne il peso del 70–80% senza alcuna differenza visibile. Strumenti come pngquant lo rilevano automaticamente.
Rimozione dei metadati
I file PNG possono contenere metadati in blocchi di testo: tEXt, iTXt, zTXt e altri blocchi accessori. Tra questi:
- Tag del software — il programma che ha creato il file (Photoshop, GIMP, ecc.)
- Data di creazione — quando l'immagine è stata creata o modificata l'ultima volta
- Autore e copyright — campi di testo incorporati
- Profilo colore ICC — da 500 byte a oltre 800 KB per i profili a gamut esteso
- Dati privati di Photoshop — i software Adobe incorporano dati dei livelli, riferimenti agli oggetti avanzati e cronologia delle modifiche, che possono pesare parecchio
Per la pubblicazione sul web, tutti questi metadati sono un peso inutile. Rimuoverli produce un file più piccolo senza alcuna differenza visiva:
# Rimuovere tutti i metadati con ImageMagick
magick input.png -strip output.png
# Rimuovere con pngcrush (conserva solo i blocchi critici)
pngcrush -rem allb input.png output.png
# Rimuovere con optipng (ottimizza anche la compressione)
optipng -strip all input.png -out output.png
Il risparmio ottenuto rimuovendo i metadati è in genere di 1–5 KB per le immagini semplici, ma può arrivare a 50–800 KB per i file esportati da Photoshop con profili ICC incorporati e blocchi di dati privati.
Impostazioni del livello di compressione
Il livello di compressione PNG stabilisce con quanta intensità l'algoritmo DEFLATE cerca schemi ripetuti. Ecco cosa significa in pratica ogni livello:
| Livello | Velocità di codifica | Dimensione del file | Caso d'uso |
|---|---|---|---|
| 0 | Istantanea | La più grande (nessuna compressione) | Debug, elaborazioni intermedie |
| 1–3 | Molto veloce | Grande | Elaborazione in tempo reale, file temporanei |
| 4–6 | Moderata | Media | Uso generico (la maggior parte degli strumenti usa 6 come predefinito) |
| 7–8 | Lenta | Piccola | Pubblicazione web, archiviazione |
| 9 | La più lenta | La più piccola | Consegna finale, risorse web |
La differenza tra il livello 6 (predefinito) e il livello 9 (massimo) è in genere del 2–5% sulla dimensione del file. La differenza nei tempi di codifica è più marcata — con immagini grandi il livello 9 può richiedere 5–10 volte più tempo del livello 6. Per le risorse web, codificate una volta e servite milioni di volte, il livello 9 vale sempre il tempo di codifica in più.
Il parametro di qualità PNG di ImageMagick
Per il PNG, ImageMagick riunisce livello di compressione e tipo di filtro in un unico parametro -quality. La cifra delle decine è il livello di compressione zlib (0–9), quella delle unità è il tipo di filtro (0–5):
# Compressione massima, filtro adattivo
magick input.png -strip -quality 95 PNG:output.png
# Significato: 9 = livello di compressione 9, 5 = filtro adattivo
# Il filtro adattivo prova tutti e 5 i tipi di filtro per ogni riga per un risultato ottimale
# Compressione veloce, nessun filtro
magick input.png -strip -quality 10 PNG:output.png
# Significato: 1 = livello di compressione 1, 0 = nessun filtro
Impostazione consigliata: usa -quality 95 per l'output PNG di ImageMagick. Il 9 indica il massimo impegno di compressione e il 5 il filtro adattivo (prova tutti i tipi di filtro per ogni riga). Così ottieni il file più piccolo, al prezzo di una codifica più lenta.
I tipi di filtro PNG spiegati
Prima della compressione DEFLATE, il PNG applica a ogni riga un filtro predittivo che trasforma i dati dei pixel per renderli più comprimibili. Il filtro non modifica l'immagine — è completamente reversibile. Lo scopo è rendere i dati più ripetitivi, così che DEFLATE possa comprimerli meglio.
| Filtro | ID | Metodo di predizione | Ideale per |
|---|---|---|---|
| None | 0 | Nessuna predizione (byte grezzi) | Immagini con palette (PNG-8), rumore casuale |
| Sub | 1 | Pixel meno il vicino di sinistra | Sfumature orizzontali, motivi orizzontali |
| Up | 2 | Pixel meno il pixel soprastante | Sfumature verticali, motivi verticali |
| Average | 3 | Pixel meno la media di sinistro + soprastante | Aree uniformi, contenuti sfumati |
| Paeth | 4 | Pixel meno il predittore Paeth (il più vicino tra sinistro, soprastante, in alto a sinistra) | Immagini naturali complesse |
| Adattivo | 5 | Prova tutti i filtri per ogni riga e sceglie il migliore | Tutte le immagini (scelta predefinita migliore) |
Il filtro adattivo (a volte chiamato "mixed" o "all") prova tutti e cinque i tipi di filtro su ogni riga di pixel e sceglie quello che produce l'output più comprimibile. Questo approccio a forza bruta produce quasi sempre il file più piccolo, ma richiede più tempo di codifica. Per la pubblicazione finale sul web, il filtro adattivo è sempre la scelta giusta.
Quanto contano i filtri?
Un filtro sbagliato può gonfiare il file del 10–30%. Per esempio, usare il filtro "None" su una fotografia (dove i pixel adiacenti sono simili) spreca buona parte del potenziale di compressione. Al contrario, usare "Sub" o "Paeth" su un'immagine con palette e valori di indice casuali può rendere il file persino più grande che senza filtro.
Ecco perché il filtro adattivo è la scelta predefinita più sicura — sceglie sempre il filtro giusto per ogni riga, anche se l'immagine contiene contenuti misti (come uno screenshot con testo e fotografie).
Ottimizzazione della palette dei colori
La riduzione più drastica delle dimensioni di un PNG si ottiene convertendo un PNG a 24 bit (16,7 milioni di colori) in una palette ottimizzata a 8 bit (256 colori). Strumenti come pngquant e pngnq usano algoritmi sofisticati per scegliere i 256 colori migliori e applicano il dithering per simulare quelli mancanti.
Come funziona pngquant
pngquant analizza l'immagine per trovare i 256 colori che rappresentano meglio l'originale. Per i pixel che cadono tra due colori della palette applica il dithering Floyd-Steinberg — una tecnica che distribuisce l'errore di colore sui pixel vicini, creando l'illusione di più colori grazie alla miscelazione spaziale.
# Ottimizzazione di base della palette (256 colori, qualità 65-80)
pngquant 256 --quality=65-80 input.png -o output.png
# Ottimizzazione della palette alla massima qualità
pngquant 256 --quality=80-100 --speed 1 input.png -o output.png
# Convertire in un numero preciso di colori
pngquant 64 input.png -o output.png # 64 colors
pngquant 16 input.png -o output.png # 16 colors (very small)
Risultati tipici dell'ottimizzazione della palette
| Tipo di immagine | Dimensione PNG-24 | PNG-8 (256 colori) | Risparmio | Impatto visivo |
|---|---|---|---|---|
| Logo (12 colori) | 45 KB | 8 KB | 82% | Nessuno (senza perdita) |
| Screenshot di interfaccia | 380 KB | 95 KB | 75% | Dithering minimo |
| Illustrazione (colori uniformi) | 210 KB | 52 KB | 75% | Da nullo a minimo |
| Infografica con sfumature | 620 KB | 180 KB | 71% | Dithering nelle sfumature |
| Fotografia | 8,5 MB | 2,1 MB | 75% | Dithering marcato (meglio usare JPG) |
Importante: tecnicamente l'ottimizzazione della palette è con perdita — riduce il numero di colori disponibili. Tuttavia, per le immagini che usano già meno di 256 colori distinti, la conversione è perfettamente senza perdita. Per le immagini con qualche colore in più, il dithering produce risultati visivamente indistinguibili dall'originale alle normali distanze di visione.
Strumenti di ottimizzazione PNG a confronto
Diversi strumenti specializzati vanno oltre ciò che ImageMagick offre per la compressione PNG. Ognuno segue un approccio diverso:
| Strumento | Tipo | Approccio | Risparmio tipico |
|---|---|---|---|
| optipng | Senza perdita | Prova più combinazioni di filtro e compressione | 5–15% |
| pngcrush | Senza perdita | Test a forza bruta di tutte le combinazioni filtro/livello | 5–15% |
| zopflipng | Senza perdita | Encoder Zopfli di Google (più lento, output DEFLATE più compatto) | 8–20% |
| pngquant | Con perdita (palette) | Riduce a una palette di 256 colori con dithering | 60–80% |
| oxipng | Senza perdita | Alternativa multi-thread a optipng (Rust) | 5–15% |
Per risultati ottimali, combina uno strumento con perdita e uno senza perdita: prima esegui pngquant (se la riduzione della palette è accettabile), poi esegui zopflipng o optipng sul risultato per la massima compressione senza perdita:
# Pipeline di compressione massima
pngquant 256 --quality=80-100 input.png -o temp.png
zopflipng temp.png output.png
rm temp.png
Quando la compressione PNG raggiunge i suoi limiti
Nessuna ottimizzazione PNG può superare una realtà di fondo: con le fotografie la compressione senza perdita non può competere con quella con perdita. Non è un difetto del PNG — è una certezza matematica. Gli algoritmi senza perdita devono conservare ogni pixel, mentre il JPEG scarta le informazioni che l'occhio non percepisce.
| Tipo di immagine | PNG ottimizzato | JPEG Q85 | Il PNG è più grande di |
|---|---|---|---|
| Foto da smartphone da 12 MP | 14,2 MB | 1,8 MB | 7,9x |
| Foto da reflex da 24 MP | 28,5 MB | 4,7 MB | 6,1x |
| Screenshot 1080p | 850 KB | 240 KB | 3,5x |
| Logo semplice (12 colori) | 8 KB | 22 KB | Il JPEG è 2,8 volte più grande |
| Icona di interfaccia (colori uniformi) | 3 KB | 9 KB | Il JPEG è 3 volte più grande |
Lo schema è chiaro:
- Fotografie e immagini naturali complesse — converti in JPEG. Risparmierai da 3 a 8 volte lo spazio senza perdita di qualità percepibile a Q85.
- Grafica semplice, loghi, icone, screenshot ricchi di testo — resta sul PNG. Sarà più piccolo del JPEG e conserverà perfettamente i bordi netti.
- Immagini con trasparenza — resta sul PNG (il JPEG non supporta la trasparenza). Valuta il WebP come alternativa, che supporta sia la compressione con perdita sia la trasparenza.
La risposta onesta: se il tuo PNG è una fotografia e ti preoccupa il peso del file, la migliore strategia di "compressione PNG" è convertirlo in JPEG. Usa il convertitore qui sopra per passare da PNG a JPG — in genere otterrai una riduzione del 70–90% con una perdita di qualità impercettibile.
Guida passo passo alla compressione PNG
Ecco un albero decisionale pratico per ridurre le dimensioni di un file PNG:
Passo 1: la tua immagine è una fotografia?
Se sì, convertila in JPEG. Carica il PNG nel convertitore qui sopra: restituisce un JPG con qualità 92 e riempie di bianco le eventuali aree trasparenti. È l'intervento più efficace in assoluto per i PNG fotografici. Una fotografia PNG da 15 MB diventa un JPEG da 1–2 MB a Q85 senza differenze visibili.
Se no (è una grafica, un logo, un'icona o uno screenshot), passa al Passo 2.
Passo 2: quanti colori usa la tua immagine?
Verificalo con ImageMagick:
magick identify -verbose input.png | grep "Colors:"
Se i colori sono 256 o meno: converti in PNG-8 per un risparmio del 70–80% senza alcuna perdita di qualità:
magick input.png -strip -colors 256 -type Palette PNG8:output.png
Se i colori sono più di 256: valuta se la riduzione della palette con dithering è accettabile, oppure mantieni il PNG-24.
Passo 3: rimuovi i metadati e massimizza la compressione
# Compressione massima senza perdita con rimozione dei metadati
magick input.png -strip -quality 95 PNG:output.png
Passo 4: valuta strumenti specializzati per risparmiare ancora
# Ottimizzazione senza perdita (nessuna variazione di qualità garantita)
optipng -o7 -strip all input.png -out output.png
# OPPURE riduzione della palette con perdita (risparmio drastico)
pngquant 256 --quality=80-100 input.png -o output.png
Compressione PNG in blocco
Quando devi comprimere un'intera cartella di file PNG, gli strumenti da riga di comando sono la soluzione più rapida.
Compressione in blocco senza perdita
# Linux / macOS: compressione massima + rimozione dei metadati
mkdir -p compressed
for f in *.png *.PNG; do
[ -f "$f" ] || continue
magick "$f" -strip -quality 95 "compressed/$f"
done
Ottimizzazione della palette in blocco (pngquant)
# Ridurre tutti i PNG a una palette di 256 colori
mkdir -p optimized
for f in *.png *.PNG; do
[ -f "$f" ] || continue
pngquant 256 --quality=80-100 "$f" -o "optimized/$f"
done
Windows PowerShell
New-Item -ItemType Directory -Force -Path ".\compressed"
Get-ChildItem *.png | ForEach-Object {
magick $_.FullName -strip -quality 95 (".\compressed\" + $_.Name)
}
Conversione in blocco da PNG a JPG (massimo risparmio per le foto)
# Convertire tutte le foto PNG in JPEG Q85
mkdir -p jpg_output
for f in *.png *.PNG; do
[ -f "$f" ] || continue
magick "$f" -quality 85 -interlace Plane -strip "jpg_output/${f%.*}.jpg"
done
Come portare un PNG sotto un limite di dimensione (per esempio 5 MB)
Il peso di un PNG dipende soprattutto dal numero di pixel e dal contenuto dell'immagine. Come punto di partenza, un'immagine RGB a 8 bit non compressa occupa larghezza × altezza × 3 byte:
| Dimensioni | Pixel | RGB non compresso |
|---|---|---|
| 4000 × 3000 | 12 MP | 36 MB |
| 3000 × 2250 | 6,75 MP | 20,3 MB |
| 2000 × 1500 | 3 MP | 9 MB |
| 1600 × 1200 | 1,92 MP | 5,8 MB |
La compressione PNG riduce poi questo valore: poco per le foto, molto per le grafiche a colori uniformi. Se un PNG fotografico supera ancora il limite a una dimensione che ti va bene, convertilo in JPG o riducilo a una palette di 256 colori.