Proseminararbeit Angewandte Mathematik für LAK Bildkompression JPEG GIF PNG Datum: 20.2.2003 Name: Mat.Nr.: Studienkennzahl: Machovec Robert 0105134 A190 406 412 Wallner Mario 9873157 A190 406 423 Zetter Hannes 0104683 A190 406 299 1 Einleitung Um Bilder computerunterstützt darzustellen und zu speichern sind digitale Formate notwendig. Diese müssen das Bild rechnerisch erfassen können und alle wichtigen Informationen in bezug auf Farbe, Größe, Helligkeit... speichern können. Ein Bildformat ist daher eine Ansammlung von Daten die ein Bild beschreiben. Wie diese Daten Ansammlungen beschaffen sind hängt von der Art des jeweiligen Verfahrens ab. In dieser Arbeit werden die drei wichtigen Formate JPEG, GIF und PNG behandelt. Die Digitalisierung, also der Prozeß, bei dem aus einem Bild für einen Computer lesbare Daten gemacht werden, erfolgt bei der Bildaufnahme durch einen Scanner oder eine Digitalkamera, wobei natürlich die Art und Technik der Bildaufnahme für die Qualität der Daten, die am Ende herauskommen, entscheidend ist. Vektorbilder Bei diesen werden Linien, Flächen und Polygonzüge gespeichert, die mathematisch durch Vektoren beschrieben werden können. Vor- und Nachteile: Vektorformate sind beliebig skalierbar, da das Bild, egal in welcher Größe, stets auf der Grundlage der vektoriellen Daten berechnet wird. Bilder, die in einem solchen Format vorliegen, zeigen in der Regel mathematisch konstruierbare Objekte, Comics und Illustrationen, da diese durch Linien beschrieben werden können. Für komplexe Bilder (z.B. Fotos) eignet sich diese Speichermethode nicht, da sich derartige Bildinhalte nicht mathematisch konstruieren lassen. . 2 Pixelbilder Bei dieser Methode der Datenspeicherung wird das kontinuierliche Bild räumlich diskretiert, d.h. es wird in kleine Punkte zerteilt, deren Farbe jeweils einzeln angegeben wird. Diese Punkte sind die kleinsten Einheiten eines Bildes. Sie sind quadratisch und werden Pixel (picture elements) genannt. Man stelle sich ein digitales Bild I als eine Matrix vor, die m Zeilen und n Spalten hat, also m*n Pixel hat. Die Elemente lm,n des Bildes I sind Pixel, die den Grauwert oder die Farbe des Bildpunktes an der Stelle (m,n) wiedergeben. Man erhält daher sogenannte Bildmatrizen die ein Bild punktweise beschreiben wobei die Zahlenwerte von lm,n in unterschiedlichen Bildformaten gespeichert werden. Bei hoher Vergrößerung ist im Gegensatz zum Vektorbild die Auflösung kleiner als zuvor. Das vorliegende Bild wird daher räumlich diskretisiert (d.h. in Bildpunkte zerlegt). Dieser Schritt wird oft auch als Rasterung bezeichnet. In Abhängigkeit der Größe eines einzelnen Bildpunktes stellt sich dabei eine gewisse Auflösung ein. (Hohe Auflösung mehr Daten) Gleiches Bild in verschiedenen Auflösungen dargestellt: dpi...Dots per inch (gibt den Grad der Auflösung an) 3 Bei der Digitalisierung muß ein Bild jedoch neben der räumlichen digitalisierung auch „farblich“ diskretisiert werden. Wird der Farbwert (oder Grauwert, wenn es sich nicht um eine Farbaufnahme handelt) diskretiert, spricht man von der Quantisierung. Mit diesem einfachen Modell - Rasterung und Quantisierung - ist ein Bild hinreichend beschrieben. Ein konkretes Beispiel zeigt den Zusammenhang zwischen Rasterung und Quantisierung; bei konstanter Speicherkapazität von 1 Kilobyte können zwei Bilder mit folgenden Eigenschaften gespeichert werden: a) 64x64 Pixel mit 4 Graustufen = 4096x2 Bit = 1 kByte b) 32x32 Pixel mit 256 Graustufen = 1024x8 Bit = 1 kByte Rasterung und Quantisierung bestimmen daher die Datenmenge eines Bildes. Das Zusammenspiel von Auflösung und Anzahl der Graustufen, also über Rasterung und Quantisierung, veranschaulichen folgende Grafiken: Wie Rasterung und Quantisierung die Bildqualität beeinflussen: a) Originalzeichen, b) grob binär digitalisiert (=2 Farben, geringe Auflösung 10dpi), c) fein binär digitalisiert (=2 Farben, mittlere Auflösung 30dpi), d) grobe Rasterung, feine Quantisierung (=8 Farben, niedrige Auflösung 10 dpi) 4 Grundlagen der Datenspeicherung Nun da wir wissen, das digitalisierte Bilder als zweidimensionale Funktionen verstanden werden können, die räumlich und farblich diskretiert sind, also jeder Pixel der Bildmatrix durch einen Wert beschrieben wird, betrachten wir, welche Eigenschaften dieser Wert (lassen wir den Begriff vorerst ganz allgemein) annehmen kann, was er aussagt und wie sich verschiedene Werte auf die Speicherung des Bildes auswirken. Wie bereits gesagt, gibt der Wert, den ein Bildpunkt annehmen kann, die Farbe oder den Grauwert an. Dies wollen wir nun präzisieren: Liegt ein Bild in Graustufen vor (normaler Weise verfügen "normale" Bilder über 256 verschiedene Grautöne), ist der Pixelwert eine skalare Größe und gibt die Helligkeit an (0=schwarz, 255=weiß). Mathematisch ist ein herkömmliches Graustufenbild also folgendermaßen definiert: Helligkeit Ein wichtiges Merkmal eines Bildes ist sicherlich seine Helligkeit. Dieser Parameter sticht dem Betrachter sofort ins Auge. Hier ist es zweckmäßig, zur Beurteilung der Helligkeit, den mittleren Grauwert zu bestimmen, also den durchschnittlichen Grauwertwert, den alle Pixel des Bildes haben. Wie schon aus der Statistik der Mittelstufe bekannt, summiert man dazu alle Grauwerte und teilt sie durch die Anzahl der Summanden. Grauwert-Histogramm Das Grauwert-Histogramm gibt Aufschluß darüber, wie viele Pixel den selben Grauwert innerhalb eines Bildes haben. Diese Art der Darstellung gibt daher keinerlei Information über den Aufbau eines Bildes. Zwei völlig unterschiedliche Motive können ein identisches Grauwert-Histogramm ergeben. Anzahl Bildpunkte 3000 2000 1000 0 100 Histogramm eines Grauwertbildes 200 5 Grauwert Ein Histogramm gibt daher für jeden Grauwert g aus der Menge aller Grauwerte G eines Bildes I seine absolute oder relative Häufigkeit pI(g) im Bild I an. Wie für alle relativen Häufigkeiten bei Verteilungen gilt also: Entropie Maß für den durchschnittlichen Informationsgehalt eines Bildes. Die Entropie H gibt die minimale Anzahl von Bits an, die man benötigt, um ein Pixel im Bild I zu speichern, und ist somit auch eine Anzeige, ob man mit Kompressionstechnik den Speicherplatz eines Bildes verringern kann. Datenstruktur Nun stellt sich die Frage wie die mathematische Beschreibung der Bildinformationen auf Speichermedien organisiert werden können. Die dabei gängigste Variante ist die Lauflängen-Codierung. Hierbei werden gleichartige aufeinanderfolgende Pixel zusammengefaßt. Diese Methode ist besonders bei schwarz/weiß Bildern (Binärbildern) von Vorteil. Zum Beispiel kann eine Folge von 0 und 1 wie folgt zusammengefaßt werden. 000111100000111111000000011111111 (3,0),(4,1),(5,0),(7,0),(8,1) Da 0 und 1 in dieser Darstellung alternierend auftreten kann weiters vereinfacht werden: 345678 Die in weiterer Folge beschriebenen Codierungen sind Varianten von Lauflängencodierungen. Die verschiedenen Kompressionsarten lassen sich in zwei Gruppen teilen: verlustfreie Kompression (lossless compression): Es findet keine Reduktion der Bilddaten statt. Jedes Bildelement bleibt erhalten. verlustbehaftete Kompression (lossy compression): Ausgangsbild kann nach Kompression nicht 1:1 wiederhergestellt werden. Es gehen Bilddaten verloren. 6 Unterschiede der Kompressionsverfahren GIF, JPEG und PNG Bei GIF, JPEG und PNG-Dateien handelt es sich um komprimierte Pixel-Formate, die speziell für den Datenaustausch zwischen verschiedenen Rechner-Plattformen entwickelt worden sind. GIF CompuServe Graphics Interchange Format Beim Wandeln einer Grafik in das GIF-Format wird eine Farbtabelle mit max. 256 Farben angelegt; die Farben resultieren aus den am häufigsten vorkommenden Farbtönen der Grafik. Das Ergebnis ist vor allem dann sehr gut, wenn im Original nicht allzu viele Farben vorkommen, was insbesondere bei Grafiken der Fall ist, die mit einem der gängigen Grafik-Programme erstellt wurden. 2 Varianten: GIF 87a und GIF89a (mit Transparenz); ebenfalls möglich: Animated GIF, Interlaced GIF (stufenweiser Aufbau des Bildes) GIF-Dateien eignen sich vor allem für Computer-Grafiken mit scharfen Kanten und großen, einfarbigen Flächen. JPEG Joint Photographics Experts Group kann maximal 16,7 Mio. Farben darstellen: True Color, 24 Bit Dateigröße und Bildqualität sind abhängig vom Kompressionsfaktor, den man beim Speichern angeben kann: 100: höchste Qualitätsstufe, keine Kompression, große Datei 0: niedrigste Qualitätsstufe, höchste Kompression, kleine Datei JPEG-Dateien eignen sich vor allem für gescannte Fotos und Bilder mit detailgetreuen Farbverläufen. PNG (gesprochen: "ping") Portable Network Graphics komprimiert verlustfrei wie das GIF-Format lizenzfrei (= Alternative zu GIF) unterstützt 16.7 Mio. Farben wie das JPEG-Format unterstützt abgestufte Transparenz unterstützt verbessertes Interlacing Animations-Sequenzen nicht möglich ist definiert in HTML 4.0 wird von Browsern der 3. Generation nicht unterstützt 7 Beispiele: Originalbild in JPEG JPEG 90% Größe: 12 KB GIF Standardpalette: 256 Farben, benutzt sind 117 Größe: 16 KB 8 Komprimiertes JPEG JPEG 33% Größe: 3 KB JPEG 90% Größe: 7 KB GIF (256 Farben) Größe: 16 KB PNG (256 Farben) Größe: 10 KB 9 PNG (True Color) Größe: 26 KB JPEG 33% Größe: 5 KB GIF (4 Farben) Größe: 0,980 KB PNG (4 Farben) Größe: 0,318 KB 10 GIF, JPEG oder PNG? Die richtige Auswahl des Grafik-Formats entscheidet maßgeblich über Qualität und Ladezeit. GIF GIF besteht aus maximal 256 Farben und eignet sich in erster Linie für Bilder, die nur geringe Farbtiefen aufweisen. Eine GIF-Datei kann durch Farbreduzierung noch verkleinert werden. GIF-Grafik 5kb JPEG-Grafik 15kb Wegen der eingeschränkten Farbenzahl eignet sich das Format nicht für Fotos. In einem direkten Vergleich sieht man den Unterschied zwischen einem Foto im JPEG und GIF-Format. Im GIF-Format sind deutlich Farbverluste erkennbar. Dateigröße:11kb Das gleiche Foto im JPEG-Format von der Qualität und der Dateigröße, die nur 6kb beträgt. 11 Das animierte GIFUm im Internet sich bewegende Pfeile darzustellen wird die GIF-Grafiken aus mehreren Einzel-Grafiken zusammensetzt, hintereinander gelegt und nach einer vorgegebenen Zeit gegeneinander ausgewechselt. Das JPEG-Format Das JPEG, auch JPEG (Joint Photographic Experts Group), kann bis zu 16,7 Millionen Farben darstellen. Anders als beim GIF, wird beim JPEG durch Datenreduktion die Dateigröße verringert. Es wird nur bei Bildern verwendet, die mehr als 256 Farben enthalten. Farbreduzierung wie beim GIF ist hier aber nicht möglich. PNG Bei PNG (Portable Network Graphics) handelt es sich um ein schon altes, aber neu ins Spiel gebrachtes Grafikformat. Es vereint die Vorzüge vom GIF und JPEG. PNG- Grafiken können mit bis zu 48-Bit-Farben abgespeichert und trotzdem verlustfrei komprimiert werden, und das mit einer Qualität von 16 Millionen Farben + 256 Transparenzstufen (GIF gibt nur bis zu 8 Bit wieder). Das GIF Format konnte es bei der Komprimierung ohne nennenswerte Qualitätsverluste auf 2,8kb bringen. Das JPEG schneidet am schlechtesten ab. Mit einer Dateigröße von 5,3 kb und einem sichtbaren Qualitätsverlust verliert das JPEG das Rennen. Die PNG-Grafik ist mit dem Ergebnis des GIFs vergleichbar (Dateigröße 2,4). Fast die gleiche Dateigröße und ein zufriedenstellendes Ergebnis. Obige Beispiele zeigen, dass PNG dem GIF nahe kommt. Würde man das Beispiel mit einem Foto wiederholen, würde das GIF verlieren und das PNG mit dem JPEG gleichziehen. 12 Was ist PNG? PNG, das "ping" ausgesprochen wird, steht für Portable Network Graphics. Es ist ein Bildkompressionsformat für das Internet, das farb- und formtreu ist. Diesem neuen Grafikformat soll die Zukunft gehören. Es soll das GIF Format ersetzen, das bisher als Standardformat für verlustfreie Bildspeicherung galt. PNG-Bilder vereinen die Vorteile von GIF- und JPEG-Bildern, wie Transparenz, Kompression und Interlace, mit der Fähigkeit unzählig viele Farben zu verwenden und eine hohe verlustfreie Komprimierung durchzuführen. Patentiert wurde das PNG-Verfahren schon 1985 in den USA. Es führte aber lange Zeit ein unverdientes Schattendasein. Das lag vor allem daran, dass das GIF-Format sich durchsetzen konnte. PNG soll der universale Ersatz für das GIF-Format im Internet sein. Es bietet eine höhere Farbauflösung (281.474.976.710.656 Farben plus Transparenz) und besitzt so viele mögliche Erweiterungen, dass es auch für andere Bereiche der Grafik interessant sein könnte. So können PNG-Bilder auf jedem Rechner dargestellt werden, verschiedene Kompressionsverfahren sind möglich, auch Informationen über den Autor des Bildes, verwendete Software und rechtliche Hinweise können dem Bild hinzugefügt werden. Technische Beschreibung Das png-Format wurde zur Ablöse des GIF entwickelt, reicht aber dennoch nicht an die Komprimierungsergebnisse des GIF-Formates heran. Die Optimierung über die verschiedenen Filter ist etwas diffizil; es arbeitet plattformübergreifend – d.h. es enthält Informationen über das Computersystem, über das es angezeigt werden soll. PNG unterstützt mehrere Farbtiefen: 1 bis 8 Bit, 24 Bit (Echtfarben – 16,7 Mill.) und 32 Bit; Eine verlustfreie Komprimierung über Filter ist somit einstellbar. Verwendung: besonders für Grafiken geeignet; bezüglich Qualität und Komprimierung bieten GIF und JPEG, unter Berücksichtigung ihrer Eigenschaften, immer noch die höchste Effektivität. Das PNG-Format hat folgende Eigenschaften: Einfach, sauber und leicht zu implementieren. Portabel. Frei verfügbare Quelltexte zum Lesen und Schreiben von Bildern. Existierende GIF-Bilder müssen zu 100% konvertiert werden können. Sequentielles Lesen und Schreiben muss unterstützt werden. Bessere Kompression als GIF, wobei immer noch verlustlos komprimiert werden soll. 13 Was bietet PNG? Es sind hier einige Punkte aufgelistet, die in der PNG-Spezifikation enthalten sind: GIF-Eigenschaften, die auch in PNG enthalten sind: Bilder mit Farbindizes bis zu 256 Farben. Serialisierbarkeit (streamability): Dateien können seriell gelesen und geschrieben werden. Inkrementelles Anzeigen: Eine entsprechend vorbereitete Datei kann während der Übertragung dargestellt werden, sodass man sehr schnell das Bild in grober Auflösung hat, welches dann schrittweise verfeinert wird. Transparenz: Teile des Bildes können als transparent markiert werden, um z.B. ein nichtrechteckiges Bild zu erzeugen. Zusatzinformation: Textuelle Kommentare und andere Daten können in der Bilddatei gespeichert werden. Komplett unabhängig von Hardware und Betriebssystem. Effektive, 100% verlustlose Kompression. Einige neue Eigenschaften von PNG, die in GIF nicht enthalten sind: Echtfarbenbilder mit bis zu 48 Bit pro Bildpunkt. Graustufenbilder mit bis zu 16 Bit pro Bildpunkt. Kompletter Alpha-Kanal (allgemeine Transparenz-Maske). Gamma-Information wird mitgespeichert, damit lassen sich die Helligkeit und der Kontrast so anpassen, dass das Bild auf verschiedenen Systemen in gleicher Weise angezeigt wird. Zuverlässiges Erkennen beschädigter Dateien (z.B. durch Übertragungsfehler). Schnellere Anzeige der ersten groben Auflösung bei der inkrementellen Anzeige als bei GIF. Aufbau einer PNG-Datei Die in einer PNG-Datei gespeicherten Daten sind in Blöcke unterschiedlicher Länge gegliedert. Jeder Block enthält eine spezielle Art von Information, wie z.B. die eigentlichen Bildpunkte, textuelle Kommentare, Farbtabellen, usw. Jede PNG-Datei besteht aus einer Signatur und einer Folge beliebig vieler Blöcke, den Chunks. Die Signatur dient lediglich dazu, eine PNG-Datei als solche zu identifizieren, während in den Chunks die eigentlichen Bildinformationen gespeichert werden. 14 Abbildung: Allgemeine Dateistruktur Signatur Die ersten 8 Byte einer PNG-Datei bilden die Signatur. Abbildung: Signatur einer PNG-Datei Diese 8 Byte identifizieren eine PNG-Datei und dienen gleichzeitig dazu, Übertragungsfehler zu entdecken. Chunks Chunks enthalten sämtliche Informationen, die in einer PNG-Datei gespeichert werden können. Dabei werden unterschiedliche Arten von Informationen auch in unterschiedlichen Chunks mit unterschiedlichen Typen gespeichert. Jeder Chunk besteht aus vier Komponenten. Abbildung: Aufbau eines Chunks 15 Länge: Die erste Komponente ist eine 4 Byte Integer-Zahl, die die Länge des Datenteils enthält. Dabei zählen nur die Daten selbst, nicht die Länge des gesamten Chunks. Typ: Als Typkennung wird eine 4 Byte Integer-Zahl verwendet, die festlegt, wie die im Chunk enthaltenen Daten zu interpretieren sind. Die einzelnen Bytes dürfen jeweils nur aus den ASCII-Zeichen a-z bzw. A-Z bestehen, zusammen bilden sie also den vier Zeichen langen Namen des Chunks. Daten: In diesem Teil des Chunks stehen die eigentlichen Daten. Wie die Daten zu interpretieren sind, hängt vom Typ des Chunks ab. CRC: Am Ende eines Chunks ist ein 4 Byte CRC (Cyclic Redundancy Check) gespeichert. Mit diesem Wert lässt sich prüfen, ob ein Chunk Fehler enthält, z.B. Fehler durch falsche Übertragung. Außerdem kann erkannt werden, ob ein Programm einen Chunk verändert hat, indem der neue und alte CRC-Wert verglichen wird. Hat sich der Wert geändert, so wurde auch der Chunk verändert. Der Test bezieht sich auf den Chunk-Typ und die Daten, jedoch nicht auf die Chunk-Länge. Kompression Der einzige Kompressionsalgorithmus, der bisher für das PNG-Format spezifiziert wurde, ist der Deflate/Inflate-Algorithmus. Dabei werden in einem max. 32 KB großem Gleitfenster, das über die Eingabedaten geschoben wird, Datenmuster gesucht, die dann kodiert werden. Das Bild lässt sich danach ohne Verluste wieder rekonstruieren. Interlacing Je größer die Datei, desto länger dauert es, bis der Betrachter erkennen kann, was er gerade lädt. Das Interlacing hilft diesem Problem ab. Es baut zunächst ein Gesamtbild mit unscharfen Konturen auf, das zunehmend schärfer kontrastiert. Interlacing in PNG-Bildern Das PNG-Format erlaubt es, mehrere Interlace-Schemata zu verwenden. Die Methode arbeitet mit 7 Durchläufen und stammt von Adam M. Costello, daher ist die Methode auch als Adam7 bekannt. Adam7 unterteilt das Bild in 8x8 Bildpunkte große Blöcke, innerhalb dieser Blöcke werden dann in jedem Durchlauf die in der nachfolgenden Abbildung gekennzeichneten Punkte übertragen. Abbildung: Adam7 Interlacing Schema 16 Die hinter Adam7 stehende Logik ist die, dass immer abwechselnd zunächst die horizontale Auflösung verdoppelt wird, dann die vertikale. Mit diesem Schema erhält man sehr schnell eine erste Version des Bildes, da im ersten Durchlauf nur 1/64 des gesamten Bildes übertragen wird. Im Vergleich zu GIF lassen sich kleine Schriften bei PNG etwa doppelt so schnell erkennen, nämlich nach etwa 25% übertragener Bilddaten, anstatt 50% bei GIF. In der folgenden Abbildung sind die sieben Durchgänge einzeln dargestellt. Dabei sind die Beispiele in zwei Hälften aufgeteilt. In der linken Hälfte werden nur die bisher übertragenen Bildpunkte dargestellt, während auf der rechten Seite die gesamten Teilblöcke mit der Farbe des Punktes gefüllt werden. 1 2 3 5 6 7 4 Abbildung Die sieben Durchgänge des Adam7 Schemas Transparenz Das PNG-Format erlaubt es, Teile eines Bildes als transparent zu markieren. Wenn ein Bild an manchen Stellen durchsichtig erscheinen soll, müssen die Bildpunkte neben den eigentlichen Farbwerten noch ein weiteres Attribut erhalten, den Alpha-Wert. Dieser Wert regelt den Grad der Transparenz, wobei gilt: Bei einem Wert von 0 ist der Punkt völlig durchsichtig, während er beim Maximalwert vollkommen undurchsichtig ist. Dazwischenliegende Werte stehen dementsprechend für teilweise transparent, der Punkt muss dann mit dem Hintergrund kombiniert werden. Es lassen sich also unterschiedliche Transparenzstufen darstellen. Farbwiedergabe In diesem Kapitel soll auf eine PNG-Eigenschaft eingegangen werden, die es ermöglicht, die Farben eines Bildes auf verschiedenen Systemen in gleicher Weise darzustellen. Ein Grafikformat müsste also Informationen enthalten, mit denen das Bild auf jedem Rechnersystem in gleicher Weise dargestellt werden kann. Dies lässt sich bereits mit einem einzigen Wert recht gut erreichen, dem Gamma-Wert. Die verschiedenen Anzeigegeräte stimmen darüber überein, dass der Wert 0 für Schwarz und 255 für Weiß steht, jedoch herrscht keine Übereinkunft für welche Intensität der Wert 128 steht. Bei Geräten mit linearen Intensitätsverläufen steht es wirklich für 50%, bei anderen Geräten kann es jedoch auch über 70% bedeuten. Die tatsächlichen Verläufe lassen sich recht gut durch eine einfache Potenzfunktion approximieren: Die Ein- und Ausgabe muss hierbei auf den Bereich zwischen 0 und 1 normiert sein. Der Exponent ist nun der Gamma-Wert des entsprechenden Gerätes. Kennt man also den Gamma-Wert des eigenen Rechnersystems und den Gamma-Wert des Systems, auf dem das Bild erzeugt wurde, können die Farbwerte so angepasst werden, dass das Bild auf beiden Systemen etwa gleich dargestellt wird. Der zweitgenannte Gamma-Wert ist derjenige, der in einer PNG-Datei gespeichert werden kann. 17 Allerdings muss sich das Programm, das ein Bild darstellen möchte, selbst um die Farbkorrektur kümmern. Es muss also auf irgendeine Weise den eigenen systemabhängigen Gamma-Wert erhalten haben, um das Bild korrekt darstellen zu können, z.B. durch eine Eingabe des Benutzers. Zusammenfassung Alles in allem kann man sagen, dass das PNG-Format, was das Speichern einzelner Bilder angeht, dem GIF-Format in allen Punkten überlegen ist. Die wesentlichen Verbesserungen seien hier noch einmal kurz erwähnt: Echtfarben- und Graustufenbilder: Durch diese Option lassen sich Bilder nun wirklich ,,verlustlos“ speichern. Bessere Kompression: PNG-Dateien sind in der Regel kürzer als Dateien anderer vergleichbarer Formate. Transparenz vielseitiger: Mit dem Alpha-Kanal hat man volle Kontrolle über die Transparenz jedes einzelnen Bildpunktes. Inkrementelles Anzeigen schneller: Für das erste Rohbild müssen nur 1/64 der Bilddaten übertragen werden (bei GIF ist es 1/8). Farbkorrektur wird ermöglicht: Durch den Gamma-Wert ist die Voraussetzung geschaffen, Bilder auf verschiedenen Systemen in gleicher Weise darstellen zu können. Beschädigte Dateien werden erkannt: Fehlerhafte Dateien können anhand der Signatur und anhand der CRC-Werte in den Chunks schnell und zuverlässig erkannt werden. Leicht erweiterbar: Es können leicht eigene Chunks zugefügt werden, ohne dass dadurch die Portabilität verloren geht. Die neuen Chunks werden von den bisher existierenden Programmen einfach überlesen. GIF bietet allerdings eine Option, die im PNG-Format nicht enthalten ist, nämlich das Speichern mehrerer Bilder in einer Datei. Damit lassen sich dann kleine Animationen realisieren, die inzwischen auf vielen WWW-Seiten zu sehen sind. Das PNG-Format ist jedoch strikt als ein Einzelbild-Format konzipiert und wird diese Option auch in Zukunft nicht anbieten. Grund dafür ist, dass das Format einfach und austauschbar sein soll. Würde man mehrere Bilder in einer Datei erlauben, gäbe es dennoch viele Programme, die diese Option nicht unterstützen würden, so wie es ja heute beim GIF-Format der Fall ist. Die Datei wäre dann also doch nicht mehr einfach austauschbar. Eine Erweiterung auf mehrere Bilder ist dennoch nicht ganz ausgeschlossen, allerdings wird diese Erweiterung einen neuen Namen und damit auch eine neue Signatur erhalten, es handelt sich dann also nicht mehr um eine reine PNG-Datei. Ein Programm kann dann selbst entscheiden, ob es nur Einzelbilder oder auch Bildsequenzen unterstützen möchte. 18 JPEG Kompression Kompressionsmodi bei JPEG Die ursprüngliche Überleguing war einen Algorithmus zur Kompression "natürlicher" Grauton- oder Farbbilder zu entwickeln, das heißt einen Kompressionsalgorithmus Bilder zu finden, der Bilddaten so reduziert, dass sie für das menschliche Auge wenig Qualität verlieren. Schwerpunkte bei der Erstellung eines geeigneten Algorithmus' waren einerseits eine hohe Kompressionsrate und andererseits eine hohe Geschwindigkeit zum Kodieren und Dekodieren. Einen Algorithmus für all diese Anforderungen zu entwickeln ist nahezu unmöglich. Daher hat man sich entschlossen vier unterschiedliche Modi zu entwickeln. Beim progressive mode wird das Bild in mehreren Durchgängen kodiert und dekodiert. Bei jedem weiteren Durchgang verbessert sich dabei die Bildqualität, was besonders nützlich ist, wenn Daten über große Entfernungen übertragen werden. Sobald das Bild eine für den Benutzer ausreichende Schärfe erreicht hat, kann dieser die Übertragung stoppen. Der hirarchical mode speichert das Bild in einer geringeren Auflösung und ebenfalls in voller Auflösung. Das gering aufgelöste Bild kann wesentlich schneller übertragen und dekodiert werden und eignet sich somit bestens als schnelle Vorschau auf das eigentliche Bild. Bei Interesse kann dann die vollaufgelöste Version geladen werden. Der lossless mode ist das einzige Verfahren, das verlustfrei kodiert und dekodiert. Der große Nachteil ist, dass die Kompressionsrate recht gering ist, weil der volle Informationsgehalt gespeichert wird. Beim sequentiell mode wird das Bild in einem einzigen Durchgang von links oben nach rechts unten dekodiert, was in der Praxis für die meisten Anwendungen gut geeignet ist, die besten Kompressionsraten erzielt und am leichtesten zu implementieren ist. Ablauf der JPEG-Kompression beim sequentiell mode: Die Kompression von Bilddaten durch das standardisierte JPEG-Verfahren verläuft folgendermaßen: 1. Es liegen Bilddaten im RGB-Format vor, von denen jeder einzelne Wert eine Zahl zwischen 0 und 255 ist. Diese werden in das YUV- oder YCbCr-Modell übertragen, wo die einzelnen Komponenten (Helligkeit, Farbton und Sättigung) verschieden stark gewichtet werden. 2. Außerdem wird eine Indexverschiebung vorgenommen, d.h. die Werte aus der Wertemenge [0;255] werden als Zahlen zwischen -128 und 127 dargestellt. Die 3 nun vorliegenden sogenannten "Layer", was eine Bezeichnung für die verschiedenen Datenmengen für Y, U,V, Cb oder Cr ist (man kann also von "Datenschichten" sprechen), werden nun einzeln weiterbearbeitet. 3. Jedes Layer wird in 8*8 große Pixelblöcke eingeteilt (das komplette Verfahren muss auf alle Matrizen und alle Layers einzeln angewendet werden), auf die im folgenden die diskrete Kosinustransformation einzeln angewendet wird. Die diskrete Kosinustransformation oder DCT (discrete cosine transform) interpretiert die Helligkeits- bzw. Farbwerte als Überlagerung von Kosinusfunktionen, die deren Schwankungen angeben, d.h wie stark sich die Werte von Ort zu Ort ändern, und transformiert die Werte in Amplituden für Kosinusfunktionen verschiedener Frequenzen. Hierbei ähneln sich die Amplituden für hohe Frequenzen, wodurch man einen Vorteil für die anschließende Kodierung erhält. 19 4. Die entstandenen Amplituden werden noch quantisiert, indem sie durch einen vom Benutzer festlegbaren Quantisierungsfaktor dividiert und danach gerundet werden, wobei viele Werte gleich Null werden. 5. Im Folgenden wird die quantisierte Matrix codiert. Dazu wird die 8*8-Matrix in einen 1*64-Vektor umgeschrieben, sodass die zahlreichen Nullen, die beim Quantisieren entstanden sind, hintereinander stehen und sich gut zusammenfassen lassen. Ist diese erste Reduzierung der Datenmenge erfolgt, so wird die eigentliche Huffman-Codierung angewendet, bei der jedem Wert ein einzigartiger Binärcode zugeordnet wird. Eine große Speicherplatzersparnis wird dadurch erreicht, dass beim Huffman-Verfahren häufig auftretenden Werten ein kurzer, seltenen Werten ein langer Code zugeteilt wird und die Codes der einzelnen Werte außerdem ohne Trennzeichen auskommen und aneinandergereiht werden können. 6. Wenn das Bild nun decodiert wird, werden die Binärcodes wieder in Zahlenwerte umgewandelt und ausführlich ausgeschrieben, sodass man wieder einen 1*64-Vektor, bzw. eine 8*8-Matrix erhält. Zur Dequantisierung werden die quantisierten Werte in dieser Matrix einfach mit dem Quantisierungsfaktor multipliziert. Die inverse DCT sorgt dann dafür, dass aus den Amplituden wieder die ursprünglichen Helligkeits- bzw. Farbwerte hergestellt werden. Zur besseren Unterscheidung wird die DCT auch forward DCT genannt. Wenn immer wir im folgenden von DCT sprechen, ist die forward DCT gemeint. Die von der inversen DCT erhaltenen Werte ergeben nun das komprimierte Bild. 20 GIF (Graphics Interchange Format) GIF (Graphics Interchange Format) ist sicherlich das bekannteste Bildkompressionsverfahren. Es wurde vom kommerziellen Online-Dienst Compuserve entwickelt, um die Speicherung zu erleichtern und um die Übertragungszeiten von Bildern im eigenen Online-Dienst gering zu halten. GIF unterscheidet sich von den meisten anderen Dateiformaten dadurch, dass es datenstromorientiert ist. Es besteht aus einer Serie von Datenpaketen, ''Blocks'' genannt, die mit zusätzlicher Protokollinformation abwechseln. GIF-Dateien werden gelesen, als kämen sie in einem Strom über eine Netzwerkverbindung. Die einzelnen Datenblöcke und Unterblöcke können an jeder Stelle der Datei auftauchen. Dies macht es schwer, jede mögliche Anordnung der Daten als ''C-Struct'' anzugeben. GIF-Dateien benutzen eine ganze Anzahl von verschiedenen Datenblockkategorien. Jeder Block kann ein Datenfeld beinhalten, oder aber Unterblöcke, die jeweils mit einem Byte als Längenangabe beginnen und somit bis zu 255 Datenbytes beinhalten können. Viele Unterblöcke können als eine zusammenhängende Gruppe einander folgen. Das Ende einer solchen Gruppe bildet ein leerer Unterblock, bei dem sich eine 0 in der Längenangabe befindet. Der letzte Hauptblock einer GIF-Datei wird auch ''Trailer'' genannt und besteht aus dem einzigen Byte 0x3B. Im GIF-Format gespeicherte Grafiken werden mit einer Lauflängenkodierung (Lempel-Ziv-Welch/ LZW) komprimiert: Anstatt alle Bits der Datei explizit abzuspeichern, wird hier nur die Anzahl der aufeinander folgenden Reihen gleicher Bits gespeichert. Dies macht sich besonders bei Grafiken mit großen, einfarbigen Flächen positiv bemerkbar. Eine Qualitätsminderung durch die Kompression findet hier nicht statt. Das GIF-Format eignet sich für Bilder bis zur Farbtiefe 8 Bit, also 256 Farben bzw. Graustufen. Die Farbtiefe hat hier (ebenso wie die Bildgröße) unmittelbare Auswirkungen auf die Dateigröße in Bytes. Gute Grafik- und Bildbearbeitungsprogramme erlauben eine Umrechnung der Farbtiefe in 1-Bit-Schritten, wodurch der Platzbedarf der Dateien individuell angepasst werden kann: Bits Farben 1 2 2 4 3 8 4 16 5 32 6 64 7 128 8 256 Für eine Grafik, die nur 10 verschiedene Farben enthält, wäre es unsinnig, mit 8 ; Bit Farbtiefe abzuspeichern, da in 4 Bit bereits 16 Farben enthalten sind. Das GIF-Format zeichnet sich durch eine hohe Kompressionsrate (die Kompressionsrate erreicht maximal 5:1, etwas mehr für einfarbige Bilder) aus: Bitmap-Grafiken sind bei gleichem Inhalt bis zu dreißig mal größer als GIF-Dateien. GIF-Dateien komprimieren im Gegensatz zu z.B. JPEG Dateien verlustfrei, aber da sie nur maximal 256 Farben (diese können jedoch aus den 16,7 Millionen Farben des RGB-Modells frei gewählt werden) pro Datei speichern können, sind sie nicht für hochauflösende Grafiken wie Fotos etc. geeignet. Vielmehr eignen sie sich für kleine Symbole, Animationen und Zeichnungen. Die GIF-Spezifikation kennt zwei Versionen: GIF87a und GIF89a. GIF87a ist die ursprünglich im Mai 1987 entworfene Spezifikation, die von allen Programmen, die GIF-Dateien bearbeiten können verstanden werden sollte. Jede Datei beginnt mit einem Header und einem ''Logical Screen Descriptor''. . Im ''Logical Screen Descriptor'' wird angegeben, wie viel Platz für die in der Datei abgelegten Bilder benötigt wird. Danach kann optional eine ''Globale Farbtabelle'' folgen. Anschließend kommen die Bilder, von denen jedes einen ''Local Image Descriptor'', eine optionale ''Lokale Farbtabelle'' und eine Block von Bilddaten beinhalten. Das letzte Feld einer jeden GIF-Datei ist ein Abschlusszeichen 21 Der jetzt gültige Standard des GIF-Formats ist das so genannte "89er-Format". Dieses Format bietet drei Möglichkeiten an, die das GIF-Format für den Einsatz im WWW besonders interessant machen: Die Möglichkeit, eine Datei "interlaced" abzuspeichern. Eine Grafik, die so abgespeichert ist, wird beim Laden nicht zeilenweise eingelesen und aufgebaut, sondern schichtweise. Gerade bei der OnlineÜbertragung ist das sehr hilfreich. Denn so erscheint die Grundstruktur der Grafik sehr schnell am Bildschirm des Anwenders. Beim weiteren Einlesevorgang wird die Grafik dann immer deutlicher und feiner aufgelöst am Bildschirm angezeigt. Das GIF-Format benutzt ein sehr einfaches Interlacing Schema, bei dem lediglich die Zeilen in einer anderen Reihenfolge übertragen werden als sie dargestellt werden. Das Schema beinhaltet vier Durchläufe: im ersten Durchlauf wird nur jede 8. Zeile übertragen (Zeile 1, 9, 17, ...), danach wird die Auflösung jeweils verdoppelt indem immer die Zeilen übertragen werden, die genau zwischen zwei schon übertragenen Zeilen liegen. Im zweiten Durchlauf sind das also die Zeilen 5, 13, 21, ...und im dritten die Zeilen 3, 7, 11, 15, .... Der vierte und letzte Schritt enthält dann alle restlichen Zeilen (2, 4, 6, 8, ...) und macht damit das Bild vollständig. 1 2 3 4 Abbildung: Die Stufen des GIF Interlace Schemas Obenstehende Abbildung zeigt die vier Durchläufe des GIF Interlacing Schemas. Hier sind auch gleich die beiden möglichen Arten des Darstellens abgebildet. In der jeweiligen linken Hälfte werden nur die bisher übertragenen Zeilen dargestellt, die restlichen bleiben ungesetzt (hier: Schwarz). Auf der rechten Seite werden die Zeilen dupliziert, so dass keine Lücken sichtbar sind. Die Möglichkeit, mehrere Grafiken in einer einzigen Grafikdatei zu speichern, verbunden mit Optionen zur Steuerung der Einzelgrafiken. Mit Hilfe dieses Features des GIF-Formats sind animierte Grafiken realisierbar. Die Möglichkeit eine Farbe als unsichtbar (transparent) zu definieren. Dies ist jedoch erst mit dem neuen, 89er-Format von GIF möglich. Im älteren, 87er Format ist das noch nicht möglich. Durch diese Möglichkeit werden z.B. GIFs, die eine transparente Hintergrundfarbe haben, egal auf welcher Hintergrundfarbe sie sich befinden ohne ihren eigenen Hintergrund dargestellt, der sonst ein hässliches Viereck in einer Farbe, die sich vom Hintergrund abheben würde, wäre. GIF (animierte) Seit der Version 89 des GIF-Formates, gibt es die Möglichkeit mehrere Bilder in einer GIF-Datei abzuspeichern. Außerdem können in der Datei Kontrollbefehle mitgespeichert werden, wie zum Beispiel die Anzeigedauer jedes einzelnen Bildes. Die Einzelbilder werden dann nacheinander angezeigt. Dadurch werden interessante Effekte etc. möglich. Man kann zum Beispiel eine Art Dia-Show erstellen, bei der die einzelnen Bilder in bestimmten Zeitintervallen, wie bei einer Präsentation, nacheinander angezeigt werden. 22 Außerdem ist es möglich einen Daumenkino-Effekt zu erzeugen, wenn man wie bei einer Videoanimation mehrere Bilder schnell hintereinander abspielt und so z.B. eine Bewegung erzeugt. Ein Vorteil der animierten GIF-Bilder ist, dass sie wirklich von jedem eingesetzt werden können, da keine Java Kenntnisse oder ähnliches benötigt werden. Doch darin liegt leider auch ihr Nachteil. Animierte GIF-Dateien werden heute kaum sinnvoll eingesetzt. Meistens sind sie in Form von herumlaufenden Hunden, brennendem Feuer etc. auf Webseiten zu finden. Durch die vielen Bilder, die in der einen Datei gespeichert sind, wird die resultierende Datei sehr schnell sehr groß und dies trägt wiederum zum Ärger des Anwenders bei, der einerseits lange auf die Seitenübertragung warten muss und somit eine hohe Telefonrechnung zahlen "darf" und andererseits werden die Seiten dadurch oft so unnötig überladen, dass die Informationen, wenn überhaupt noch welche vorhanden sind, nur schwer zu finden sind. 23