PNG

PNG ist die Abkürzung für Portable Network Graphics, Portable Netzwerk-Graphik. Intern steht es für "PiNG is Not GIF"

Geschichte

Am 1. Juni 1983 wird der LZW-Komprimierungsalgorithmus vom IBM patentiert. Kurze Zeit später, am 20 Juni 1983 patentiert Welch für die Sperry Corporation den LZW-Algorithmus noch einmal in spezieller Form. Das Patentamt erkennt diese Überschneidung aber nicht und vergibt ein weiteres Patent.
1993 bemerkt die Unisys, die die Sperry Corporation aufgekauft haben, das ihr patentierter Algorithmus vom GIF benutzt wird und informiert CompuServe. Am 29. Dezember 1994 tritt dann die Unisys mit Gebührenforderungen an die Öffentlichkeit.
Nur 6 Tage später, am 04. Januar 1995 postet Thomas Boutell in Zahlreichen Newsgroups die Spezifikation für ein "Portable Bitmap Format" (PBF). Daraufhin bildet eine bunte Schar von Entwicklern der ganzen Welt per E-Mail und Diskussionsforen die PNG-Gruppe. Ihr Ziel ist es ein neues Graphikformat zu entwickeln, das frei von geschützten Algorithmen und den besonderen Anforderungen der Datennetze gewachsen ist. Schnell stellt man fest, dass Erweiterungen bestehender Formate nicht allen Anforderungen gerecht werden kann, man braucht ein komplett neues Format.
In rascher Folge erscheinen immer wieder erweiterte und verfeinerte PNG-Spezifikationen.
Mitte 1995 erscheint dann eine Spezifikation zur Erweiterung des PNG-Formats. Es geht darum, mehrere Bilder in einer Datei zu speichern, was ja schon vom GIF bekannt war. Die Animationsfähigkeiten gehen aber weit über die von GIF hinaus. Mittlerweile heißt dieses Format MNG (Multiple Network Graphics), es ist stark an das PNG-Format angelehnt.
Ende des Jahres veröffentlicht das World Wide Web Consortium (W3C) die PNG-Spezifikation 0.92 als offizielles Arbeitsdokument.
Mitte 1996 wird PNG für abgeschlossen erklärt und es erscheint die Spezifikation 1.0, die kurze Zeit später vom W3C auf offiziellen "Proposed Recommendiation"-Status.
Ende des Jahres 1997 werden in Netscape und Internet Explorer die ersten PNG-Fähigkeiten aufgenommen.

Grundsätzliche Daten

PNG ist als Ersatz und Verbesserung für GIF gedacht. Es kann pro Farbkomponente eine Tiefe von 16 Bit speichern, also 16 Bit Graustufen (65536 verschiedene Grautöne) und 48 Bit RGB (das sind 281 Billionen verschiedene Farben). Es unterstützt auch eine Farbpalette von bis zu 256 Farben. Das CMYK-Farbmodell unterstützt PNG nicht, da es nicht im Internet verwendet wird.

In einem Bild, das als PNG gespeichert wird, kann man Gammaparameter und Parameter für die Beschreibung des gewählten Farbraums hinzufügen. Man kann verschiedene Kompressionsverfahren wählen, sie sind wie beim GIF verlustfrei. PNG's enthalten Prüfsummen, eine progressive Anzeige und die Möglichkeit der Transparenz.

Erklärungen

Gammaparamter
Unterschiedliche Ein- und Ausgabegeräte haben ein unterschiedliches Helligkeits- und Kontrastverständnis. Damit ein Bild immer mit der selben Helligkeit und dem selben Kontrast ausgegeben werden kann, werden die Bildinformationen mit Hilfe der Gammaparameter umgerechnet und sehen dann so aus wie ursprünglich.

Farbraumparameter
Auch Farben werden von jedem Gerät anders verstanden. Mit Hilfe der Farbraumparameter werden die Farben umgerechnet, so das die Ausgabe die selben Farben enthält wie sie ursprünglich waren.

Prüfsummen
PNG unterstützt drei Arten von Integritätsprüfungen um Übertragunsfehler zu erkennen.
Als erstes gibt es eine 8 Byte lange Signatur, mit deren Hilfe falsche Konvertierungen bei Übertragungen sichtbar gemacht werden können.
Bei der 2. Methode wird für jeden Datenblock eine Prüfsumme berechnet. So kann während des Ladens des Bildes die Prüfsumme mitberechnet werden und mit der ursprünglichen verglichen werden. So können schnell Übertragungsfehler erkannt werden.
Als letztes gibt es noch eine Prüfsumme, die auf den ganzen unkomprimierten Datenstrom gerechnet wird.

 Progressive Anzeige
Ähnlich wie bei GIF und JPEG ist es beim PNG möglich schon den groben Bildinhalt zu erkennen, bevor das Bild komplett geladen wurde. Dabei wird das Bild in 8 x 8 Pixelblöcke zerlegt. Dann läuft der Bildaufbau in 7 Durchgängen ab. Im ersten Durchgang wird nur ein Pixel pro Block angezeigt. In jedem folgenden Durchgang kommen dann immer mehr Pixel pro Block hinzu bis nach dem 7 Durchgang alle Bildinfortmationen übertragen wurden.
Mit diesem Verfahren kann man schon 8 mal schneller ein grobes Bild sehen als beim GIF.

Transparenz
Im Gegensatz zum GIF werden beim PNG echte Alphakanäle unterstützt und nicht nur Schwarz-Weiße. Man kann also mit dem Alphakanal nicht nur bestimmen, ob ein Pixel transparent ist oder nicht. Man kann auch bestimmen, wie transparent ein Pixel ist, damit sind fließende Übergänge zum Hintergrund möglich, ohne das bei wechselnden Hintergrund unschöne Randeffekte auftreten. Alle PNG-Typen (Graustufen, Echtfarben, Palette) können Alphakanäle enthalten.

Browsertest

Auf der folgenden Seite des W3C kann man testen, ob der benutzte Browser PNG anzeigen kann, und ob er Alphakanäle und Gammakanäle richtig verarbeitet:
http://www.w3.org/Graphics/PNG/

Komprimierung

Die Komprimierten Daten werden bei PNG im zlib-Format gespeichert. Dieses Format ist ein allgemeiner Container für verlustfrei komprimierte Datenströme und unterstützt (theoretisch) verschiedene Kompressionsalgorithmen. Bisher wird aber nur der Deflate-Algorithmus benutzt. Dieser Algorithmus wird auch bei den Kompressionsprogrammen ZIP und GZIP verwendet, er kombiniert den LZ77-Algorithmus mit den Huffman-Codes.
Der LZ77-Algorithmus durchsucht den Datenstrom nach möglichst langen, wiederholten Byteketten und kann ab der zweiten Fundstelle Verweise auf die erste setzen.
Der Huffman-Code macht sich zu nutze, das bestimmte Datenketten, die durch Symbole ersetzt wurden, häufiger vorkommen als andere. Symbole, die sehr oft verwendet werden, bekommen eine kurze Kodierung, während seltenere Symbole eine längere bekommen.
Deflate führt nun beide Algorithmen nacheinander aus, erst werden mittels LZ77 Symbole erstellt, die dann mit Huffman kodiert werden. Vorher können noch Filter auf die Bilddaten angewand werden, die die Häufigkeiten des Auftretens von Symbolen verschieben, damit diese ungleichmäßiger sind, das kann sich dann der Huffman-Code zu nutze machen und die Bilddaten werden noch besser komprimiert.

Gliederung JPEG 2000