Wie Bildkomprimierung funktioniert: Die Grundlagen
Aus irgendeinem Grund können Sie tatsächlich 2 Millionen Pixel in ein Bild einfügen, ohne 1, 97 Megabyte Speicherplatz zu verwenden. Ich fand ein süßes 1080p-Wallpaper (das ungefähr 2 Millionen Pixel hat) und lud es herunter. Bei der Überprüfung der Eigenschaften fiel mir etwas merkwürdiges auf: Es hat nur 230 KB Speicherplatz auf meiner Festplatte belegt. Warum das? Für jemanden, der Bildkompression nicht ganz versteht, scheint es wie Magie. Aber sobald Sie das Thema kennen, werden Sie verstehen, dass einige Bilder größer als andere sind, trotz der Anzahl der Pixel, die sie auf Ihrem Bildschirm belegen. Die Zeit ist kurz, also lassen Sie uns kurz auf die Grundprinzipien der Bildkomprimierung eingehen.
Methoden, Ansätze, Algorithmen Galore.
Es ist naiv zu glauben, dass es nur eine Möglichkeit gibt, ein Bild zu komprimieren. Es gibt verschiedene Methoden, von denen jede einen einzigartigen Ansatz für ein gemeinsames Problem hat und jeder Ansatz in verschiedenen Algorithmen verwendet wird, um zu einer ähnlichen Schlussfolgerung zu gelangen. Jeder Algorithmus wird durch ein Dateiformat (PNG, JPG, GIF usw.) dargestellt. Im Moment werden wir über die Methoden sprechen, die normalerweise zum Komprimieren von Bildern verwendet werden, was erklären wird, warum einige von ihnen so viel weniger Platz einnehmen.
Verlustfreie Kompression
Wenn Sie im Zusammenhang mit der Bildkomprimierung an das Wort "verlustfrei" denken, denken Sie wahrscheinlich über eine Methode nach, die am härtesten versucht, die Qualität beizubehalten und gleichzeitig eine relativ kleine Bildgröße beizubehalten. Das ist sehr nah an der Wahrheit. Als eine Methode minimiert eine verlustfreie Komprimierung die Verzerrung so weit wie möglich, wobei die Bildklarheit erhalten bleibt. Dazu erstellt es einen Index aller Pixel und gruppiert gleichfarbige Pixel zusammen. Es ist eine Art, wie die Dateikomprimierung funktioniert, außer dass es sich um kleinere Dateneinheiten handelt.
DEFLATE gehört zu den häufigsten Algorithmen für diese Art von Job. Es basiert auf zwei anderen Algorithmen (Huffman und LZ77, wenn Sie ein Bücherwurm sind) und es hat eine sehr erprobte Möglichkeit, Daten in Bildern zu gruppieren. Anstatt nur die Länge der Daten zu durchlaufen und mehrere Instanzen eines Pixels mit der gleichen Farbe in einer einzigen Dateneinheit zu speichern (bekannt als Lauflängencodierung), greift es auf doppelte Strings innerhalb des gesamten Codes und setzt einen "Zeiger" für jedes gefundene Duplikat. Überall dort, wo eine bestimmte Datenfolge (Pixel) häufig verwendet wird, werden alle diese Pixel durch ein gewichtetes Symbol ersetzt, das alles weiter komprimiert.
Beachten Sie, dass mit Run-Length Encoding und DEFLATE keines der Pixel tatsächlich aufgefressen oder gezwungen wird, die Farbe zu ändern. Die Verwendung dieser Methode führt zu einem Bild, das mit dem Original identisch ist. Der einzige Unterschied zwischen den beiden liegt darin, wie viel Platz tatsächlich auf Ihrer Festplatte belegt ist!
Verlustbehaftete Komprimierung
Wie der Name schon sagt, verliert ein Bild durch die verlustbehaftete Komprimierung einen Teil seines Inhalts. Wenn es zu weit genommen wird, kann es das Bild tatsächlich unkenntlich machen. Aber verlustbehaftet bedeutet nicht, dass Sie Pixel eliminieren. Es gibt tatsächlich zwei Algorithmen, die üblicherweise verwendet werden, um Bilder auf diese Weise zu komprimieren: Transformationscodierung und Chroma-Subsampling . Ersteres ist häufiger in Bildern und letzteres in Video.
Bei der Transformationscodierung werden die Farben eines Bildes unter Verwendung einer speziellen mathematischen Formel, die als diskrete Kosinustransformation bezeichnet wird, gemittelt. Das Bild erleidet Farbverlust und kann Artefakte (seltsame Pixellierung an zufälligen Punkten des Bildes) verursachen, wenn es übermäßig verwendet wird. Dieser spezielle Algorithmus gleicht seine Ungeschicklichkeit mit einem starken Vorteil aus: Sie können bestimmen, wie viel Qualität Sie mit dem Bild behalten möchten. Bei der verlustfreien Komprimierung können Sie die Qualität ganzheitlich beeinflussen, indem Sie die Anzahl der Farben festlegen, die jedes Bild haben sollte.
Chroma-Subsampling verwendet einen anderen Ansatz. Anstatt kleine Farbblöcke zu mitteln, die auch die Helligkeit eines Bildes beeinflussen können, versucht es vorsichtig, die Helligkeit in allen Bereichen gleich zu halten. Dies trickst deine Augen dazu, nicht jeden Qualitätsabfall zu bemerken. Es ist wirklich großartig für die Komprimierung von Animationen, weshalb es mehr in Videostreams verwendet wird. Das heißt nicht, dass Bilder diesen Algorithmus nicht auch verwenden.
Aber warte, da ist mehr! Google nahm auch einen neuen verlustreichen Algorithmus namens WebP in Angriff. Anstatt die Farbinformationen zu mitteln, sagt es die Farbe eines Pixels voraus, indem es die umgebenden Fragmente betrachtet. Die Daten, die tatsächlich in das resultierende komprimierte Bild geschrieben werden, sind die Differenz zwischen der vorhergesagten Farbe und der tatsächlichen Farbe. Am Ende werden viele Vorhersagen genau sein, was zu einer Null führt. Und statt eine ganze Reihe von Nullen zu drucken, komprimiert es alle in ein Symbol, das sie repräsentiert. Die Bildgenauigkeit wird verbessert und die Komprimierung reduziert laut Google die Bildgröße im Vergleich zu anderen verlustbehafteten Algorithmen um durchschnittlich 25 Prozent.
Es ist Zeit für Fragen und Diskussion!
Wenn Sie mit der Welt der Bilddateien noch nicht vertraut sind, werden Sie wahrscheinlich ein wenig von dieser Information verwirren. Wenn du eine Frage hast, poste sie in den Kommentaren und wir werden unser Bestes geben, sie zu beantworten. Ansonsten können Sie gerne darüber diskutieren!