Die Faustregel und wo sie bricht
Bei der verlustbehafteten Komprimierung werden Informationen weggeworfen, daher sollte immer eine kleinere Datei erzeugt werden als bei der verlustfreien Komprimierung. Das trifft auf Fotos zu und ist oft genug falsch, um verständlich zu sein.
Entscheidend ist, wie vorhersehbar das Bild ist.
Verlustfreie Encoder funktionieren, indem sie Wiederholungen und Strukturen finden – eine Reihe identischer Pixel, eine Reihe, die der darüber liegenden Reihe ähnelt, eine Palette von sechzehn Farben, die im gesamten Bild verwendet werden. Geben Sie einem einen Screenshot und er wird eine enorme Regelmäßigkeit finden und ihn fast kostenlos kodieren.
Verlustbehaftete Encoder funktionieren, indem sie Details verwerfen, die das Auge nicht wahrnehmen kann, vor allem in Farbe und in hochfrequenten Texturen. Geben Sie einem ein Foto und es gibt eine Menge zu verwerfen. Geben Sie ihm ein Logo auf einem flachen Hintergrund und es gibt fast nichts – aber es bezahlt immer noch die vollen Kosten für die Transformation, und schlimmer noch, es erzeugt sichtbare Ringelungen an den scharfen Kanten, für die es nie entwickelt wurde.
Vor dem Weiterlesen
Sie speichern dasselbe Foto zweimal: einmal verlustfrei, einmal mit hoher verlustbehafteter Qualität. Welche Datei ist kleiner?
Es kommt auf das Bild an. Ein Foto ist voller Rauschen und Farbverläufe, die durch die verlustbehaftete Komprimierung kostengünstig verworfen werden, so dass verlustbehaftete Bilder problemlos gewinnen. Eine flache Grafik mit großen Bereichen identischer Farbe lässt sich hervorragend verlustfrei komprimieren, und eine verlustbehaftete Kodierung kann sie sowohl größer als auch sichtbar schlechter machen. The content decides, not the format.
Was gewinnt und wann
| Inhalt | Normalerweise kleiner | Warum |
|---|---|---|
| Fotografien | Verlustbehaftet, sehr | Laut und detailliert; es gibt viel zu verwerfen |
| Screenshots, Benutzeroberfläche | Verlustfrei | Große flache Flächen, wiederholte Reihen, wenige deutliche Farben |
| Logos, Symbole, Strichzeichnungen | Verlustfrei | Scharfe Kanten sind genau das, was verlustbehaftet zu bewältigen ist |
| Diagramme und Diagramme | Verlustfrei | Flache Füllungen plus Text; Textklingeln ist deutlich sichtbar |
| Alles, was Text enthält | Verlustfrei | Das Ringen um Glyphen ist das auffälligste Artefakt, das es gibt |
| Sehr kleine Bilder | Entweder – oft auch nicht | Der Header-Overhead dominiert unterhalb einiger hundert Bytes |
Die letzte Reihe ist diejenige, die die Leute überrascht. Unter etwa einem Kilobyte kostet der Container mehr als der Inhalt, und eine Konvertierung kann eine Datei tatsächlich vergrößern. Das ist kein Fehler im Konverter.
Ein gelungenes Beispiel
Ein 32×32-Testbild mit einem sanften Farbverlauf, einem scharf umrandeten roten Quadrat und gesättigten Primärfarben – absichtlich ungeschickt und ungefähr so, wie ein kleines UI-Element aussieht:
source PNG 1,805 bytes
lossless WebP 146 bytes pixel-for-pixel identical
lossy WebP q80 264 bytes mean error 5.5 per channel
Die verlustfreie Datei ist 80 % kleiner als die verlustbehaftete und außerdem exakt. Beide Tatsachen haben den gleichen Grund: Das Bild hat überwiegend flache Farben und harte Kanten, was bei einem verlustfreien Encoder der beste Fall und bei einem verlustbehafteten fast der schlechteste Fall ist.
Diese Zahlen stammen aus der eigenen Testsuite dieses Repositorys, die das Bild bei jedem Commit codiert und es erneut mit einer anderen Bibliothek decodiert, um die überlebenden Pixel zu überprüfen.
So entscheiden Sie, ohne zu raten
Probieren Sie beide aus und vergleichen Sie. Es dauert eine Sekunde, kostet nichts und ist zuverlässiger als jede Faustregel – einschließlich der dieser Seite.
Wenn dies nicht gelingt, stellen Sie eine Frage: Hat dieses Bild große Flächen mit genau derselben Farbe oder scharfe Kanten zwischen den Farben? Wenn ja, beginnen Sie mit verlustfrei. Wenn es sich um ein Foto handelt, beginnen Sie mit der verlustbehafteten Qualität bei etwa 80 und erhöhen Sie die Qualität erst, wenn Sie in voller Größe einen Unterschied erkennen können.
Was sich daran nichts ändert
Die Wahl der Komprimierung hat keinen Einfluss auf die Bildabmessungen und eine Größenänderung ist fast immer die größere Einsparung. Ein 4000 Pixel breites Foto, das in einer 600-Pixel-Spalte angezeigt wird, verschwendet weit mehr Bytes, als jede Encoder-Einstellung wiederherstellen kann – skalieren Sie es zuerst und wählen Sie dann ein Format aus.
Metadaten sind eine dritte, separate Ebene. Ein Bildmetadaten-Entferner kann beschreibende PNG-Blöcke oder JPEG-Anwendungssegmente weglassen, ohne die Abmessungen oder die codierte Bildnutzlast zu ändern. Das ist nützlich für die Privatsphäre und die Provenienzhygiene, konkurriert aber selten mit der Größenänderung oder fotografischen Komprimierung als Größenverringerung.
Fragen
Sollte ich dann einfach immer verlustfrei verwenden?
Nein. Bei Fotos ist der Verlust deutlich geringer – oft um das Fünf- bis Zehnfache – und bei vernünftigen Qualitätseinstellungen ist der Verlust kaum zu erkennen. Die Regel bezieht sich auf den Inhalt: Fotos lassen sich gut verlustfrei komprimieren, weil sie verrauscht und detailliert sind, und Screenshots lassen sich gut verlustfrei komprimieren, weil sie flach und repetitiv sind.
Warum wurde mein kleines Bild größer, als ich es konvertierte?
Denn jedes Format hat feste Header-Kosten und unterhalb einiger hundert Bytes dominiert dieser Overhead alles, was der Kompressor speichert. Ein in WebP konvertiertes Einzelpixel-PNG kann einfach deshalb größer ausfallen, weil der RIFF-Container mehr kostet als die Pixeldaten. Das ist normal und deshalb sollte ein Konverter die tatsächlich gemessene Richtung angeben und nicht von einer Einsparung ausgehen.
Bedeutet verlustfrei, dass die Datei identisch ist?
Das bedeutet, dass die *Pixel* identisch sind, nicht die Bytes. Ein aus einem PNG erstelltes verlustfreies WebP ist eine völlig andere Datei, die in genau das gleiche Bild dekodiert – jeder Kanal jedes Pixels stimmt mit dem Original überein. Das ist eine prüfbare Eigenschaft, und es lohnt sich, sie zu testen.