Als freier Ersatz für das mit Patenten belegte Grafikformat GIF ist PNG ein modernes Format für Bilder und Grafiken im Web. Im Gegensatz zum JPEG-Format findet eine verlustfreie Kompression statt, diese basiert auf dem von ZIP-Archiven bekannten Deflate-Algorithmus. Prinzipiell sind PNG-Bilder also ganz ähnlich zu ZIP-Dateien aufgebaut.
Um die hohe Kompression möglich zu machen, welche in der Regel deutlich besser als die von GIF-Dateien ist, werden zusätzlich Vorfilter auf die Bilddaten angewendet. Erstere ist bei Web-Anwendungen besonders wichtig. Wer eine viel frequentierte Seite betreibt, dem wird jedes am Volumen der Seite gesparte Byte am Ende des Monats um ein vielfaches in der Bandbreitenstatistik und damit der Rechnung niederschlagen. Nicht zuletzt freut es den Besucher, wenn die Seite schnell lädt.
Genau so wie es auf dem Markt unzählige verschiedene und unterschiedlich effektive Routinen zur Erstellung von ZIP-Archiven gibt, ist es durch geschickte Optimierung möglich, PNG-Dateien zu optimieren. Einige Möglichkeiten werde ich im Folgenden kurz vorstellen.
Eine der effektivsten, leider nicht verlustfreien, Methoden ist das Reduzieren der Farbtiefe. Denn, werden pro Pixel 24 bit für die Farbe bereitgestellt, so wird die Enddatei logischerweise erheblich größer, als wenn nur 8 bit (256 Farbstufen) zur Quantisierung bereit stehen. In der Praxis muss dies aber keine massive Beeinträchtigung der Bildqualität bedeuten. Entscheidend ist, mithilfe eines geschickten Algorithmus die Quantisierungsstufen so zu verteilen, dass ein möglichst geringer Gesamtfehler entsteht. Einer Technik, diesem Optimierungsproblem Herr zu werden, bedient sich der von Anthony Dekker beschriebene [1] neuquant-Algorithmus, welcher mit dem Prinzip neuronaler Netze arbeitet. Stuart Coyle [2] nutzt dies, um eine eigene Fassung des Programms neuquant (von Greg Roelf) zu entwickeln, pngnq. Eine erneute maßgebliche Verbesserung steuerte der Programmierer „pornel“ bei, das Resultat ist das Tool „improved pngnq“ [3].
Die Bedienung ist simpel. Per drag-and-drop die zu optimierenden Dateien auf die .bat Datei „Process — Palette reduce 64 NeuQuant.bat“ bzw. „Process — Palette reduce 256 NeuQuant.bat“ ziehen. Das Resultat wird mit dem Zusatz „neuqant“ im Dateinamen abgespeichert.
Wie bereits erwähnt, gibt es aber noch weitere Möglichkeiten die Dateigröße weiter zu reduzieren. Eine davon ist das Programm PNGOUT [4] von Ken Silvermann, auch bekannt als Entwickler der im Spiel Duke Nukem 3D verwendeten Build engine. PNGOUT bzw. das kommerzielle, mit grafischer Benutzeroberfläche und MultiCore-CPU-Unterstützung ausgestattete PNGOUTWin [5] optimieren die Deflate-Kompression auf Basis von KZIP, ebenfalls eine Entwicklung von Ken Silvermann. Eine weitere, nicht-komerzielle graphische Oberfläche für PNGOUT stellt PNGGauntlet bereit [6].
Die Bearbeitung nimmt zwar einige Minuten in Anspruch, so ist dies doch eine wertvolle Investition für Webseiten mit hohem Besucheraufkommen. Nach meinen Erfahrungen erreicht PNGOUT in der Regel eine Reduktion der Dateigröße um 10–20%. Eine Menge, wenn man bedenkt, dass keinerlei Information verloren geht und die Datei anschließend genau wie zuvor von Browsern und Anwendungen geöffnet und verarbeitet werden kann.
Auch wenn dies eher akademischer Natur ist, selbst nach der Anwendung von PNGOUT – dem meiner Erfahrung nach besten Optimierer für PNG-Dateien – lassen sich noch einige Bytes herauspressen. Ursprünglich arbeitete Sam Allen an einem eigenen ZIP-Programm. Dieses Unterfangen musste mit der Zeit aufgegeben werden, doch stellte er fest, dass er in seiner Deflate-Implementation einige Tricks verwendete, „die kein anderer Mitbewerber hatte“. Das hierauf basierende Programm DeflOpt [6] optimiert jegliche mit Deflate komprimierten Dateien mit jenen „Tricks“ noch einmal ein wenig. Natürlich kann die Software daher auch auf PNG-Dateien angewendet werden.
[1]: http://members.ozemail.com.au/~dekker/NEUQUANT.HTMLNequant-Algorithmus beschrieben von Anthony Dekker
[2]: http://pngnq.sourceforge.net Stuart Coyle, pngnq
[3]: http://pornel.net/pngnq „pornel“, improved pngnq
[4]: http://advsys.net/ken/utils.htm Programme, u.a. PNGOUT von Ken Silvermann
[5]: http://www.ardfry.com/pngoutwin/ PNGOUTWin mit GUI und Batch-Verarbeitung
[6]: http://brh.numbera.com/software/pnggauntlet/ PNGGauntlet, Freeware GUI für PNGOUT
[7] http://dotnetperls.com/deflopt Sam Allen, Deflopt
[8] http://de.wikipedia.org/wiki/PNG Wikipedia zu PNG