PNG ist die Abkürzung für Portable Network Graphics, Portable Netzwerk-Graphik. Intern steht es für "PiNG is Not GIF"
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.
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.
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.
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/
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 |