pngquant — PNG-Bilder verlustbehaftet komprimieren

Verlustbehafteter PNG-Kompressor: reduziert 24/32-Bit-Bilder auf 8-Bit-Paletten – oft 60–70 % kleiner bei kaum sichtbarem Qualitätsverlust.

pngquant verkleinert PNG-Dateien drastisch, indem es 24/32-Bit-Bilder auf eine 8-Bit-Palette mit Alphakanal reduziert – oft 60–70 % kleiner bei kaum sichtbarem Unterschied. Die Quantisierung ist allerdings verlustbehaftet: Im Standard entsteht eine neue Datei name-fs8.png, doch mit --ext .png --force überschreibst du das Original – lege also ein Backup an. Wo echte Verlustfreiheit Pflicht ist, greifst du besser zu optipng.

Grundlagen

pngquant <image.png> — Quantisiert auf 256 Farben, Ausgabe als -fs8.png.

pngquant screenshot.png

pngquant <n> <image.png> — Quantisiert auf eine bestimmte Farbanzahl (2–256).

pngquant 128 screenshot.png

pngquant --output <output.png> <input.png> — Schreibt in eine bestimmte Ausgabedatei.

pngquant --output optimized.png original.png

pngquant -o <output.png> <input.png> — Kurzform von --output.

pngquant -o small.png large.png

pngquant --ext .png --force <image.png> — Überschreibt die Originaldatei direkt (in-place).

pngquant --ext .png --force screenshot.png

pngquant *.png — Stapelverarbeitung aller PNGs (erzeugt *-fs8.png-Dateien).

pngquant images/*.png

Qualitätssteuerung

pngquant --quality=<min>-<max> <image.png> — Legt den Qualitätsbereich fest (0–100). Bricht mit Exit-Code 99 ab, wenn das Minimum nicht erreicht wird.

pngquant --quality=65-80 photo.png

pngquant --quality=80-100 <image.png> — Hohe Qualität (geringe Kompression, kleinere Einsparung).

pngquant --quality=80-100 icon.png

pngquant --quality=45-65 <image.png> — Aggressive Kompression (größere Einsparung, bei genauem Hinsehen sichtbar).

pngquant --quality=45-65 background.png

pngquant --quality=0-100 <image.png> — Akzeptiert jede Qualität (bricht nie ab, maximale Kompression).

pngquant --quality=0-100 image.png

pngquant --skip-if-larger <image.png> — Schreibt keine Ausgabe, wenn sie größer als das Original wäre.

pngquant --skip-if-larger icon.png

Farben & Dithering

pngquant 64 <image.png> — Reduziert auf 64 Farben (gut für einfache Grafiken).

pngquant 64 icon.png

pngquant 16 <image.png> — Reduziert auf 16 Farben (sehr klein, ideal für Icons/Logos).

pngquant 16 logo.png

pngquant --nofs <image.png> — Deaktiviert Floyd-Steinberg-Dithering (schärfere Kanten, mögliches Banding).

pngquant --nofs icon.png

pngquant --floyd=<n> <image.png> — Setzt die Dithering-Stärke (0.0 = aus, 1.0 = voll, Standard: 1.0).

pngquant --floyd=0.5 photo.png

pngquant --posterize <bits> <image.png> — Reduziert die Präzision der Farbkanäle (nützlich bei Verläufen).

pngquant --posterize 4 gradient.png

Geschwindigkeit & Performance

pngquant --speed <n> <image.png> — Setzt den Kompromiss aus Geschwindigkeit und Qualität (1 = beste Qualität, 11 = am schnellsten).

pngquant --speed 1 photo.png

pngquant --speed 1 --quality=65-80 <image.png> — Langsamste Stufe für das beste Qualitätsergebnis.

pngquant --speed 1 --quality=65-80 hero-image.png

pngquant --speed 11 *.png — Schnellste Verarbeitung für Stapeloperationen.

pngquant --speed 11 thumbnails/*.png

Ausgabeoptionen

pngquant --ext <suffix> <image.png> — Legt das Suffix der Ausgabedatei fest (Standard: -fs8.png).

pngquant --ext -small.png screenshot.png

pngquant --strip <image.png> — Entfernt alle Metadaten aus der Ausgabe.

pngquant --strip photo.png

pngquant - < <input.png> > <output.png> — Liest von stdin, schreibt nach stdout (für Pipes).

cat input.png | pngquant - > output.png

pngquant --verbose <image.png> — Zeigt ausführliche Verarbeitungsinfos (umgerechnete Farben, Dateigrößen).

pngquant --verbose screenshot.png

Typische Muster

pngquant --quality=65-80 --speed 1 --strip --ext .png --force *.png — Web-Optimierung: in-place, Metadaten entfernt, qualitätsgesteuert.

pngquant --quality=65-80 --speed 1 --strip --ext .png --force assets/*.png

find . -name '*.png' -exec pngquant --quality=65-80 --skip-if-larger --strip --ext .png --force {} \; — Optimiert rekursiv alle PNGs in-place (sicher, überspringt größere Ergebnisse).

find public/ -name '*.png' -exec pngquant --quality=65-80 --skip-if-larger --strip --ext .png --force {} \;

pngquant --quality=65-80 --strip photo.png && optipng -o2 photo-fs8.png — Pipeline: pngquant (verlustbehaftet), dann optipng (verlustfrei) für maximale Kompression.

pngquant --quality=65-80 --strip photo.png && optipng -o2 photo-fs8.png

pngquant 256 --quality=80-100 --skip-if-larger --nofs logo.png — Optimiert ein Logo/Icon (kein Dithering für scharfe Kanten, hohe Qualität).

pngquant 256 --quality=80-100 --skip-if-larger --nofs logo.png

for f in *.png; do pngquant --quality=65-80 --strip -o "dist/$f" "$f"; done — Stapeloptimierung in ein separates Verzeichnis.

mkdir -p dist && for f in src/*.png; do pngquant --quality=65-80 --strip -o "dist/$(basename $f)" "$f"; done

Fazit

pngquant gehört zu den effektivsten Werkzeugen für schlanke PNGs im Web: Mit --quality 65-80, --speed und einer passenden Farbanzahl holst du große Einsparungen heraus, ohne dass das Auge etwas bemerkt. Behalte aber im Kopf, dass die Kompression verlustbehaftet ist – einmal quantisierte Farben sind unwiderruflich weg. Der Standard schützt dich, weil er eine neue -fs8.png schreibt; sobald du --force mit --ext .png oder --output kombinierst, überschreibst du das Original endgültig – arbeite dann nur mit Backups. Unterschreitet das Ergebnis dein Qualitätsminimum, bricht pngquant mit Exit-Code 99 ab und lässt die Datei unangetastet. Für rein verlustfreie Anforderungen ist optipng die richtige Wahl.

Verwandte Kommandos

  • optipng – verlustfreier PNG-Optimierer als ideale Ergänzung
  • gifsicle – GIF-Animationen erstellen und optimieren
  • convert – Bilder konvertieren und bearbeiten mit ImageMagick