PNG verkleinen: 5 manieren
- Verklein de afmetingen. De bestandsgrootte volgt het aantal pixels: halveer je breedte en hoogte, dan blijft ongeveer een kwart van de gegevens over.
- Beperk de kleuren tot een 8-bit palet. Tools zoals pngquant besparen vaak 60 tot 80% met nauwelijks zichtbare verandering bij graphics.
- Verwijder metadata. Tekstchunks, ICC-profielen en editorgegevens kunnen oplopen tot honderden kilobytes.
- Gebruik maximale compressie. Niveau 9 met adaptief filteren bespaart nog een paar procent, zonder kwaliteitsverlies.
- Zet foto's om naar JPG. Is de PNG een foto en heb je geen transparantie nodig, dan is JPG meestal 5 tot 10 keer kleiner.
PNG-compressie is in de kern verliesvrij
Dit is het allerbelangrijkste om te begrijpen over PNG: het compressieniveau heeft geen invloed op de kwaliteit. Een PNG opgeslagen op compressieniveau 1 en een PNG opgeslagen op niveau 9 leveren bij het openen precies hetzelfde beeld op. Elke pixel is identiek, bit voor bit.
PNG gebruikt het DEFLATE-algoritme (hetzelfde als achter gzip en ZIP-bestanden) om pixelgegevens te comprimeren. Wanneer je het compressie"niveau" aanpast, bepaal je hoe grondig de encoder zoekt naar herhalende patronen en optimale coderingsstrategieën. Hogere niveaus betekenen:
- Kleinere bestanden — de encoder vindt efficiëntere manieren om dezelfde gegevens weer te geven
- Tragere codering — er is meer rekenwerk nodig om die efficiëntie te vinden
- Identieke decompressie — ongeacht het niveau zijn de gedecodeerde pixels hetzelfde
Dit verschilt fundamenteel van JPEG, waar de kwaliteitsinstelling direct bepaalt hoeveel beeldinformatie permanent wordt weggegooid. Bij PNG wordt nooit iets weggegooid. De "kwaliteitsvraag" is simpelweg: hoeveel processortijd wil je besteden om nog een paar bytes te besparen?
Kernbegrip: PNG-compressieniveau = coderingsinspanning, niet kwaliteit. Niveau 9 betekent niet "lagere kwaliteit" — het betekent "beter zoeken naar een kleinere weergave van dezelfde gegevens".
PNG-8 vs PNG-24 vs PNG-32
De effectiefste manier om een PNG te verkleinen is het juiste PNG-subtype voor je afbeelding kiezen. Het verschil tussen deze typen kan neerkomen op een 3 tot 5 keer kleiner bestand met weinig of geen zichtbare verandering.
| Type | Kleurdiepte | Kleuren | Transparantie | Typische grootte |
|---|---|---|---|---|
| PNG-8 | 8-bit (geïndexeerd palet) | Tot 256 | 1-bit (aan/uit) of 8-bit alfa | Kleinst |
| PNG-24 | 24-bit (RGB) | 16,7 miljoen | Geen | Gemiddeld |
| PNG-32 | 32-bit (RGBA) | 16,7 miljoen | Volledige 8-bit alfa | Grootst |
PNG-8: het geheime wapen voor kleine bestanden
PNG-8 slaat elke pixel op als index in een palet van maximaal 256 kleuren. In plaats van 3 bytes per pixel (RGB) of 4 bytes (RGBA) gebruikt het slechts 1 byte. Dit fundamentele verschil maakt PNG-8-bestanden 3 tot 5 keer kleiner dan vergelijkbare PNG-24-bestanden.
PNG-8 is ideaal voor:
- Logo's — de meeste logo's gebruiken minder dan 20 kleuren
- Iconen en UI-elementen — iconen in flat design hebben doorgaans 5 tot 15 kleuren
- Eenvoudige illustraties — diagrammen, grafieken en infographics met egale kleurvlakken
- Screenshots van interfaces met veel tekst — terminaluitvoer, code-editors, tekstdocumenten
PNG-8 is niet geschikt voor:
- Foto's — foto's bevatten duizenden kleuren; terugbrengen naar 256 veroorzaakt zichtbare kleurbanden
- Vloeiende verlopen — met 256 kleuren is een vloeiend verloop niet zonder zichtbare stappen weer te geven
- Afbeeldingen met halfdoorzichtigheid — PNG-8 kan per paletkleur een alfawaarde opslaan, maar zachte randen en schaduwen hebben vaak meer combinaties van kleur en alfa nodig dan 256 vermeldingen toelaten
PNG-24 vs PNG-32: heb je het alfakanaal nodig?
Het verschil tussen PNG-24 en PNG-32 is het alfakanaal (transparantie). Elke pixel in PNG-32 heeft een extra byte voor transparantie, waardoor bestanden 25 tot 33% groter zijn dan PNG-24. Heeft je afbeelding geen transparantie nodig (geen transparante of halfdoorzichtige delen), sla dan op als PNG-24 en vermijd de overhead van een ongebruikt alfakanaal.
Snelle winst: Heb je een PNG-24-afbeelding met slechts 50 verschillende kleuren (gebruikelijk bij UI-mockups en diagrammen), dan kan omzetten naar PNG-8 het bestand 70 tot 80% kleiner maken zonder enige zichtbare verandering. Tools zoals pngquant herkennen dit automatisch.
Metadata verwijderen
PNG-bestanden kunnen metadata bevatten in tekstchunks: tEXt, iTXt, zTXt en andere aanvullende chunks. Daaronder vallen:
- Softwaretags — welk programma het bestand heeft gemaakt (Photoshop, GIMP enz.)
- Aanmaaktijdstip — wanneer de afbeelding is gemaakt of voor het laatst gewijzigd
- Auteur en copyright — ingesloten tekstvelden
- ICC-kleurprofiel — kan 500 bytes tot meer dan 800 KB zijn bij profielen met een breed kleurengamma
- Privégegevens van Photoshop — Adobe-software sluit laaggegevens, verwijzingen naar slimme objecten en bewerkingsgeschiedenis in, wat flink kan oplopen
Voor gebruik op het web is al deze metadata overbodige ballast. Verwijderen levert een kleiner bestand op zonder enige zichtbare verandering:
# Alle metadata verwijderen met ImageMagick
magick input.png -strip output.png
# Verwijderen met pngcrush (behoudt alleen kritieke chunks)
pngcrush -rem allb input.png output.png
# Verwijderen met optipng (optimaliseert ook de compressie)
optipng -strip all input.png -out output.png
Het verwijderen van metadata bespaart bij eenvoudige afbeeldingen doorgaans 1 tot 5 KB, maar bij bestanden uit Photoshop met ingesloten ICC-profielen en private datachunks kan het 50 tot 800 KB zijn.
Instellingen voor het compressieniveau
Het PNG-compressieniveau bepaalt hoe intensief het DEFLATE-algoritme naar patronen zoekt. Dit betekent elk niveau in de praktijk:
| Niveau | Coderingssnelheid | Bestandsgrootte | Toepassing |
|---|---|---|---|
| 0 | Direct | Grootst (geen compressie) | Debuggen, tussentijdse verwerking |
| 1 tot 3 | Zeer snel | Groot | Realtime verwerking, tijdelijke bestanden |
| 4 tot 6 | Gemiddeld | Gemiddeld | Algemeen gebruik (de meeste tools gebruiken standaard 6) |
| 7 tot 8 | Traag | Klein | Webgebruik, archivering |
| 9 | Traagst | Kleinst | Definitieve levering, webbestanden |
Het verschil tussen niveau 6 (standaard) en niveau 9 (maximaal) is in bestandsgrootte doorgaans 2 tot 5%. Het verschil in coderingstijd is groter — niveau 9 kan bij grote afbeeldingen 5 tot 10 keer langer duren dan niveau 6. Voor webbestanden die je één keer codeert en miljoenen keren serveert, is niveau 9 de extra coderingstijd altijd waard.
De PNG-kwaliteitsparameter van ImageMagick
ImageMagick codeert voor PNG zowel het compressieniveau als het filtertype in één parameter -quality. Het tientalcijfer is het zlib-compressieniveau (0 tot 9) en het eenheidscijfer het filtertype (0 tot 5):
# Maximale compressie, adaptief filter
magick input.png -strip -quality 95 PNG:output.png
# Uitleg: 9 = compressieniveau 9, 5 = adaptief filter
# Het adaptieve filter test per rij alle 5 filtertypen voor het beste resultaat
# Snelle compressie, geen filter
magick input.png -strip -quality 10 PNG:output.png
# Uitleg: 1 = compressieniveau 1, 0 = geen filter
Beste standaardkeuze: Gebruik -quality 95 voor PNG-uitvoer met ImageMagick. De 9 staat voor maximale compressie-inspanning en de 5 voor adaptief filteren (probeert per rij alle filtertypen). Zo krijg je het kleinste bestand, ten koste van een tragere codering.
PNG-filtertypen uitgelegd
Vóór de DEFLATE-compressie past PNG per rij een voorspellingsfilter toe dat de pixelgegevens beter comprimeerbaar maakt. Het filter verandert de afbeelding niet — het is volledig omkeerbaar. Het doel is de gegevens repetitiever te maken, zodat DEFLATE ze beter kan comprimeren.
| Filter | ID | Voorspellingsmethode | Het best voor |
|---|---|---|---|
| None | 0 | Geen voorspelling (ruwe bytes) | Paletafbeeldingen (PNG-8), willekeurige ruis |
| Sub | 1 | Pixel min linkerbuur | Horizontale verlopen, horizontale patronen |
| Up | 2 | Pixel min pixel erboven | Verticale verlopen, verticale patronen |
| Average | 3 | Pixel min gemiddelde van links + boven | Egale vlakken, vloeiend overlopende inhoud |
| Paeth | 4 | Pixel min Paeth-voorspeller (dichtstbijzijnde van links, boven, linksboven) | Complexe natuurlijke beelden |
| Adaptief | 5 | Test per rij alle filters en kiest het beste | Alle afbeeldingen (beste standaardkeuze) |
Het adaptieve filter (soms "mixed" of "all" genoemd) test voor elke pixelrij alle vijf filtertypen en kiest het type dat de best comprimeerbare uitvoer oplevert. Deze brute-force-aanpak levert bijna altijd het kleinste bestand op, maar het coderen duurt langer. Voor definitieve weblevering is adaptief filteren altijd de juiste keuze.
Hoeveel maken filters uit?
Een verkeerde filterkeuze kan het bestand 10 tot 30% groter maken. Wie bijvoorbeeld het filter "None" gebruikt op een foto (waar aangrenzende pixels op elkaar lijken), laat veel compressiepotentieel liggen. Omgekeerd kan "Sub" of "Paeth" op een paletafbeelding met willekeurige indexwaarden het bestand zelfs groter maken dan helemaal geen filter.
Daarom is adaptief filteren de veilige standaard — het kiest voor elke rij altijd het juiste filter, ook als de afbeelding gemengde inhoud bevat (zoals een screenshot met zowel tekst als foto's).
Optimalisatie van het kleurenpalet
De grootste verkleining van een PNG bereik je door een 24-bit PNG (16,7 miljoen kleuren) om te zetten naar een geoptimaliseerd 8-bit palet (256 kleuren). Tools zoals pngquant en pngnq gebruiken geavanceerde algoritmen om de beste 256 kleuren te kiezen en passen dithering toe om de ontbrekende kleuren na te bootsen.
Hoe pngquant werkt
pngquant analyseert de afbeelding om de 256 kleuren te vinden die het origineel het best weergeven. Voor pixels die tussen paletkleuren in vallen past het Floyd-Steinberg-dithering toe — een techniek die de kleurafwijking over naburige pixels verdeelt, zodat door ruimtelijke menging de illusie van meer kleuren ontstaat.
# Basisoptimalisatie van het palet (256 kleuren, kwaliteit 65-80)
pngquant 256 --quality=65-80 input.png -o output.png
# Paletoptimalisatie met maximale kwaliteit
pngquant 256 --quality=80-100 --speed 1 input.png -o output.png
# Omzetten naar een specifiek aantal kleuren
pngquant 64 input.png -o output.png # 64 kleuren
pngquant 16 input.png -o output.png # 16 kleuren (zeer klein)
Typische resultaten van paletoptimalisatie
| Type afbeelding | Grootte PNG-24 | PNG-8 (256 kleuren) | Besparing | Visuele impact |
|---|---|---|---|---|
| Logo (12 kleuren) | 45 KB | 8 KB | 82% | Geen (verliesvrij) |
| UI-screenshot | 380 KB | 95 KB | 75% | Minimale dithering |
| Illustratie (egale kleuren) | 210 KB | 52 KB | 75% | Geen tot minimaal |
| Infographic met verlopen | 620 KB | 180 KB | 71% | Dithering in verlopen |
| Foto | 8,5 MB | 2,1 MB | 75% | Sterke dithering (gebruik liever JPG) |
Belangrijk: Paletoptimalisatie is technisch gezien lossy — het aantal beschikbare kleuren neemt af. Voor afbeeldingen die al minder dan 256 verschillende kleuren gebruiken, is de omzetting echter volledig verliesvrij. Bij afbeeldingen met iets meer kleuren levert dithering resultaten op die op normale kijkafstand niet van het origineel te onderscheiden zijn.
PNG-optimalisatietools vergeleken
Verschillende gespecialiseerde tools gaan voor PNG-compressie verder dan ImageMagick. Elke tool kiest een andere aanpak:
| Tool | Type | Aanpak | Typische besparing |
|---|---|---|---|
| optipng | Verliesvrij | Probeert meerdere combinaties van filter en compressie | 5 tot 15% |
| pngcrush | Verliesvrij | Test met brute kracht alle combinaties van filter en niveau | 5 tot 15% |
| zopflipng | Verliesvrij | Zopfli-encoder van Google (trager, kleinere DEFLATE-uitvoer) | 8 tot 20% |
| pngquant | Lossy (palet) | Reduceert tot een palet van 256 kleuren met dithering | 60 tot 80% |
| oxipng | Verliesvrij | Multithreaded alternatief voor optipng (Rust) | 5 tot 15% |
Voor het beste resultaat combineer je een lossy en een verliesvrije tool: voer eerst pngquant uit (als paletreductie acceptabel is) en daarna zopflipng of optipng op het resultaat voor maximale verliesvrije compressie:
# Pijplijn voor maximale compressie
pngquant 256 --quality=80-100 input.png -o temp.png
zopflipng temp.png output.png
rm temp.png
Wanneer PNG-compressie haar grenzen bereikt
Geen enkele PNG-optimalisatie kan de fundamentele werkelijkheid omzeilen: verliesvrije compressie kan bij foto's niet tippen aan lossy compressie. Dat is geen gebrek van PNG — het is een wiskundige zekerheid. Verliesvrije algoritmen moeten elke pixel behouden, terwijl JPEG informatie weggooit die het oog niet waarneemt.
| Type afbeelding | Geoptimaliseerde PNG | JPEG Q85 | PNG is groter met |
|---|---|---|---|
| Smartphonefoto van 12 MP | 14,2 MB | 1,8 MB | 7,9x |
| DSLR-foto van 24 MP | 28,5 MB | 4,7 MB | 6,1x |
| Screenshot in 1080p | 850 KB | 240 KB | 3,5x |
| Eenvoudig logo (12 kleuren) | 8 KB | 22 KB | JPEG is 2,8x groter |
| UI-icoon (egale kleuren) | 3 KB | 9 KB | JPEG is 3x groter |
Het patroon is duidelijk:
- Foto's en complexe natuurlijke beelden — zet ze om naar JPEG. Je bespaart 3 tot 8 keer zonder waarneembaar kwaliteitsverlies bij Q85.
- Eenvoudige graphics, logo's, iconen, screenshots met veel tekst — blijf bij PNG. Het wordt kleiner dan JPEG en behoudt scherpe randen perfect.
- Afbeeldingen met transparantie — blijf bij PNG (JPEG ondersteunt geen transparantie). Overweeg WebP als alternatief, dat zowel lossy compressie als transparantie ondersteunt.
Het eerlijke antwoord: Is je PNG een foto en gaat het je om de bestandsgrootte, dan is omzetten naar JPEG de beste "PNG-compressie". Gebruik de converter hierboven om van PNG naar JPG te gaan — meestal zie je een 70 tot 90% kleiner bestand met onwaarneembaar kwaliteitsverlies.
PNG comprimeren: stap voor stap
Hier is een praktische beslisboom om een PNG kleiner te maken:
Stap 1: Is je afbeelding een foto?
Zo ja, zet haar om naar JPEG. Upload je PNG in de converter hierboven; die levert een JPG met kwaliteit 92 op, waarbij eventuele transparantie wit wordt opgevuld. Dit is de allereffectiefste stap voor foto-PNG's. Een PNG-foto van 15 MB wordt een JPEG van 1 tot 2 MB bij Q85, zonder zichtbaar verschil.
Zo nee (het is een graphic, logo, icoon of screenshot), ga dan verder met stap 2.
Stap 2: Hoeveel kleuren gebruikt je afbeelding?
Controleer dat met ImageMagick:
magick identify -verbose input.png | grep "Colors:"
Bij 256 kleuren of minder: zet om naar PNG-8 voor 70 tot 80% besparing zonder kwaliteitsverlies:
magick input.png -strip -colors 256 -type Palette PNG8:output.png
Bij meer dan 256 kleuren: beslis of paletreductie met dithering acceptabel is, of houd PNG-24 aan.
Stap 3: Verwijder metadata en comprimeer maximaal
# Maximale verliesvrije compressie met verwijdering van metadata
magick input.png -strip -quality 95 PNG:output.png
Stap 4: Overweeg gespecialiseerde tools voor extra besparing
# Verliesvrije optimalisatie (gegarandeerd geen kwaliteitsverandering)
optipng -o7 -strip all input.png -out output.png
# OF lossy paletreductie (enorme besparing)
pngquant 256 --quality=80-100 input.png -o output.png
PNG's in bulk comprimeren
Moet je een hele map met PNG-bestanden comprimeren, dan zijn commandlinetools de snelste aanpak.
Verliesvrije bulkcompressie
# Linux / macOS: maximale compressie + metadata verwijderen
mkdir -p compressed
for f in *.png *.PNG; do
[ -f "$f" ] || continue
magick "$f" -strip -quality 95 "compressed/$f"
done
Paletoptimalisatie in bulk (pngquant)
# Alle PNG's terugbrengen tot een palet van 256 kleuren
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)
}
PNG in bulk omzetten naar JPG (maximale besparing voor foto's)
# Alle PNG-foto's omzetten naar 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
Een PNG onder een groottelimiet krijgen (bijvoorbeeld 5 MB)
De grootte van een PNG hangt vooral af van het aantal pixels en de inhoud van de afbeelding. Als uitgangspunt neemt een ongecomprimeerde 8-bit RGB-afbeelding breedte × hoogte × 3 bytes in beslag:
| Afmetingen | Pixels | Ongecomprimeerd RGB |
|---|---|---|
| 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 |
PNG-compressie verkleint dat vervolgens: een beetje bij foto's, veel bij egale graphics. Is een foto-PNG bij een acceptabel formaat nog steeds te groot, zet hem dan om naar JPG of breng hem terug tot een palet van 256 kleuren.