Tragbare Netzwerkgrafiken

Tragbare Netzwerkgrafiken

PNG transparency demonstration 1.png

Ein PNG-Bild mit einem 8-Bit-Transparenzkanal, überlagert auf einen karierten Hintergrund, der normalerweise in verwendet wird Grafiksoftware um Transparenz anzuzeigen
Dateiname Erweiterung
.png
Internet -Medientyp
Bild/PNG
Typschlüssel PNGF
Png
Uniform Typ Identifier (UTI) public.png
UTI -Konformation öffentliches Bild
magische Zahl 89 50 4e 47 0d 0a 1a 0a (8 Bytes Hexadezimal)
Entwickelt von PNG -Entwicklungsgruppe (gespendet an W3c)
Erstveröffentlichung 1. Oktober 1996; vor 25 Jahren
Art des Formats Verlustlos Bitmap Bildformat
Erweitert um APNG, Jng und Mng
Standard ISO/IEC 15948,[1] Ietf RFC 2083
Offenes Format? Ja

Tragbare Netzwerkgrafiken (Pngoffiziell ausgesprochen /pɪŋ/[2][3] KLINGELN, umgangssprachlich ausgesprochen /ˌpichɛnˈich/[4] PINKELN-en-Jee) ist ein Rastergrafiken Datei Format Das unterstützt Verlustlose Datenkomprimierung. PNG wurde als verbesserter, nicht bezahlter Ersatz für entwickelt Grafik -Austauschformat (GIF) - Inoffiziell standen die Initialen PNG für die Rekursives Akronym "PNG ist nicht gif".[5]

PNG unterstützt palettenbasierte Bilder (mit 24-Bit-Paletten RGB oder 32-Bit RGBA Farben), Graustufen Bilder (mit oder ohne eine Alpha -Kanal für Transparenz) und nicht-palettenbasierte RGB- oder RGBA-Bilder in voller Farbe. Die PNG -Arbeitsgruppe hat das Format für das Übertragen von Bildern auf dem entwickelt Internet, nicht für Druckgrafiken in professioneller Qualität; daher nicht-RGB Farbräume wie zum Beispiel CMYK werden nicht unterstützt. Eine PNG -Datei enthält ein einzelnes Bild in einer erweiterbaren Struktur von Stücke, codieren die Basis Pixel und andere Informationen wie Textkommentare und Integritätsprüfungen dokumentiert in RFC 2083.[6]

PNG -Dateien verwenden die Dateierweiterung Png oder png und werden zugewiesen MIME Medientyp Bild/PNG.[7] PNG wurde veröffentlicht als Information RFC 2083 im März 1997 und als ISO/IEC 15948 Standard im Jahr 2004.[1]

Geschichte und Entwicklung

Die Motivation zur Schaffung des PNG -Formats war die Erkenntnis, dass am 28. Dezember 1994 die Lempel -Ziv -Welch (LZW) Datenkompression Algorithmus in der verwendet Grafik -Austauschformat (GIF) Format war patentiert durch Unisys. Das Patent erforderte, dass alle Software, die GIF -Lohngelände unterstützt Usenet Benutzer. Einer von ihnen war Thomas Boutell, der am 4. Januar 1995 einen Vorläufer -Diskussionsthread auf dem Usenet Newsgroup "Comp.graphics", in dem er einen Plan für eine kostenlose Alternative zu GIF entwickelt hat. Andere Benutzer in diesem Thread haben viele Vorschläge veröffentlicht, die später Teil des endgültigen Dateiformats sein würden. Oliver Fromme, Autor des Populärs JPEG Zuschauer Qpeg, schlug den Ping -Namen vor und wird schließlich zu PNG, a Rekursives Akronym Bedeutung Ping ist nicht gifund auch die .png Verlängerung. Andere Vorschläge später umfassten die Deflat -Komprimierungsalgorithmus und 24-Bit-Farbe Unterstützung, das Fehlen des letzteren in GIF motiviert auch das Team, ihr Dateiformat zu erstellen. Die Gruppe würde als PNG -Entwicklungsgruppe bekannt werden, und als die Diskussion schnell erweitert wurde, verwendete sie später eine Mailingliste, die mit a verbunden ist CompuServe Forum.[2][8]

Die vollständige Spezifikation von PNG wurde unter Genehmigung von freigelassen W3c am 1. Oktober 1996 und später als RFC 2083 am 15. Januar 1997. Die Spezifikation wurde am 31. Dezember 1998 als Version 1.1 überarbeitet, was sich mit technischen Problemen befasste Gamma und Farbkorrektur. Version 1.2, veröffentlicht am 11. August 1999, fügte die hinzu itxt Chunk als einzige Änderung der Spezifikation, und am 10. November 2003 wurde eine neu formatierte Version von 1.2 als zweite Ausgabe des W3C -Standards veröffentlicht.[9] und als internationaler Standard (ISO/IEC 15948: 2004) am 3. März 2004.[10][1]

Obwohl GIF es erlaubt, AnimationEs wurde beschlossen, dass PNG ein Einzelbildformat sein sollte.[11] Im Jahr 2001 veröffentlichten die Entwickler von PNG die Multiple-Image-Netzwerkgrafiken (MNG) Format mit Unterstützung für Animation. MNG erreichte einen moderaten Anwendungsunterstützung, aber nicht genug unter den Mainstream -Webbrowsern und keine Verwendung unter Website -Designern oder -verlegern. Im Jahr 2008, sicher Mozilla Entwickler veröffentlichten die Animierte tragbare Netzwerkgrafiken (APNG) Format mit ähnlichen Zielen. APNG ist ein Format, das nativ von unterstützt wird Gecko- und Presto-basierte Webbrowser und wird auch häufig für Miniaturansichten bei Sony's verwendet PlayStation Portable System (unter Verwendung der normalen PNG -Dateierweiterung). Im Jahr 2017 wurden Browser auf Chrombasis übernommen APNG Unterstützung. Im Januar 2020, Microsoft Edge wurde Chrom basierend, somit die Unterstützung für die Unterstützung für APNG. Damit unterstützen alle großen Browser jetzt APNG.

PNG Arbeitsgruppe

Die ursprüngliche PNG -Spezifikation wurde von einer Ad -hoc -Gruppe von verfasst Computergrafik Experten und Enthusiasten. Diskussionen und Entscheidungen über das Format wurden per E -Mail durchgeführt. Die auf RFC 2083 aufgeführten ursprünglichen Autoren sind:[12]

  • Editor: Thomas Boutell
  • Mitwirkender Redakteur: Tom Lane
  • Autoren (in alphabetischer Reihenfolge nach Nachnamen): Mark Adler, Thomas Boutell, Christian Brunschen, Adam M. Costello, Lee Daniel Crocker, Andreas Dilger, Oliver Fromme, Jean-Loup Gailly, Chris Herberth, Aleks Jakulin, Neal Kettler, Tom Lane, Alexander Lehmann, Chris Lilley, Dave Martindale, Owen Mortensen, Keith S. Pickens, Robert P. Poole, Glenn Randers-Pehrson, Greg Roelofs, Willem Van Schaik, Guy Schalnat, Paul Schmidt, Tim Wegner, Jeremy Wohl

Datei Format

Das PNG -Bild PNG-Gradient.png mit a gesehen Hex -Editor Bewerbung für Ubuntu.

Dateiheader

Eine PNG-Datei beginnt mit einer 8-Byte Unterschrift[13] (Siehe HEX -Editor -Bild rechts):

Werte (verhexen)) Zweck
89 Hat das hohe Bit eingestellt, um Übertragungssysteme zu erkennen, die nicht unterstützen 8-Bit-Daten und um die Wahrscheinlichkeit zu verringern, dass eine Textdatei fälschlicherweise als PNG interpretiert wird, oder umgekehrt.
50 4e 47 Im ASCII, die Buchstaben Png, damit eine Person das Format leicht identifizieren kann, wenn es in einem Texteditor angezeigt wird.
0d 0a A DOS-Stil Zeilenende (CRLF) zum Erkennen von DOS-Unix-Linien-Endverwandlung der Daten.
1a Ein Byte, das die Anzeige der Datei unter DOS beendet, wenn der Befehl Typ wurde verwendet - das Ende der Datei Charakter.
0a Ein Unix-Line-Ending (LF) zum Erkennen von UNIX-DOS-Zeilenumwandlungen.

"Brocken" innerhalb der Datei

Nach dem Header kommt eine Reihe von einer Reihe von Stücke,[14] Jeder von denen vermittelt bestimmte Informationen über das Bild. Brocken erklären sich als kritisch oder untergeordnetund ein Programm, das auf einen Nebenanteil stoßen, das es nicht versteht, kann es sicher ignorieren. Diese auf Chunk-basierte Speicherschichtstruktur, ähnlich im Konzept wie a Containerformat oder zu Amiga's IFF, ist so konzipiert, dass das PNG -Format erweitert wird und gleichzeitig die Kompatibilität mit älteren Versionen beibehalten wird - es bietet Vorwärtskompatibilitätund dieselbe Dateistruktur (mit unterschiedlichen Signaturen und Stücken) wird in der zugehörigen Mng, Jng, und APNG Formate.

Ein Stück besteht aus vier Teilen: Länge (4 Bytes,[15] Big-Endian), Chunk Type/Name (4 Bytes[16]), Chunk -Daten (Länge Bytes) und CRC (zyklischer Redundanzcode/Kontrollumme; 4 Bytes[15]). Das CRC ist ein Netzwerk-Byte-Order CRC-32 berechnet über den Direktorten und Chunk -Daten, aber nicht über die Länge.

Länge Chunk -Typ Chunk -Daten CRC
4 Bytes 4 Bytes Länge Bytes 4 Bytes

Chunk-Typen erhalten einen Vier-Buchstaben Fallempfindlichkeit ASCII -Typ/Name; vergleichen Viercc. Der Fall der verschiedenen Buchstaben im Namen (Bit 5 des numerischen Wertes des Zeichens) ist a Bitfeld das liefert die Decoder Mit einigen Informationen über die Natur der Stücke erkennt es nicht.

Der Fall des ersten Buchstabens zeigt an, ob der Chunk kritisch ist oder nicht. Wenn der erste Buchstaben Großbuchstaben ist, ist der Chunk kritisch; Wenn nicht, ist der Chunk Zusatz. Kritische Teile enthalten Informationen, die zum Lesen der Datei erforderlich sind. Wenn ein Decoder auf einen kritischen Teil trifft, den er nicht erkennt, muss er die Datei lesen oder dem Benutzer eine entsprechende Warnung liefern.

Der Fall des zweiten Briefes zeigt an, ob der Chunk "öffentlich" ist (entweder in der Spezifikation oder in der Registrierung von Sonderpuls öffentlichen Stücken) oder "privat" (nicht standardisiert). Großbuchstaben ist öffentlich und Kleinbuchstaben ist privat. Dies stellt sicher, dass öffentliche und private Chunk -Namen niemals miteinander in Konflikt stehen können (obwohl zwei private Chunk -Namen Konflikte in Konflikt haben können).

Der dritte Buchstabe muss Großbuchstaben sein, um der PNG -Spezifikation zu entsprechen. Es ist für die zukünftige Erweiterung reserviert. Decoder sollten einen Stück mit einem niedrigeren Fall mit dem dritten Buchstaben behandeln wie jeder andere nicht anerkannte Teil.

Der Fall des vierten Buchstabens zeigt an, ob der Chunk von Redakteuren, die ihn nicht erkennen, sicher kopieren kann. Wenn Kleinbuchstaben, kann das Chunk unabhängig von den Änderungen an der Datei sicher kopiert werden. Wenn Großbuchstaben, kann es nur kopiert werden, wenn die Modifikationen keine kritischen Stücke berührt haben.

Kritische Stücke

Ein Decoder muss in der Lage sein, kritische Teile zu interpretieren, um eine PNG -Datei zu lesen und zu rendern.

  • Ihdr Muss der erste Teil sein; Es enthält (in dieser Reihenfolge) das Bild des Bildes
    • Breite (4 Bytes)
    • Höhe (4 Bytes)
    • Bittiefe (1 Byte, Werte 1, 2, 4, 8 oder 16)
    • Farbtyp (1 Byte, Werte 0, 2, 3, 4 oder 6)
    • Komprimierungsmethode (1 Byte, Wert 0)
    • Filtermethode (1 Byte, Wert 0)
    • Interlace -Methode (1 Byte, Werte 0 "kein Interlace" oder 1 "ADAM7 Interlace ") (13 Daten Bytes insgesamt).[9]

Wie in der angegeben World Wide Web KonsortiumDie Bit -Tiefe ist definiert als "Anzahl der Bits pro Probe oder pro Palettenindex (nicht pro Pixel)".[9]

  • Plte enthält die Palette: Eine Liste von Farben.
  • Idat Enthält das Bild, das in mehreren IDAT -Stücken aufgeteilt werden kann. Eine solche Aufteilung erhöht die Dateigröße geringfügig, ermöglicht es jedoch, ein PNG auf Streaming zu generieren. Der IDAT -Chunk enthält die tatsächlichen Bilddaten, nämlich der Ausgangsstrom des Komprimierungsalgorithmus.[17]
  • Iend markiert das Bildende; Das Datenfeld des Iend -Chunk hat 0 Bytes/ist leer.[18]

Das Plte Chunk ist für den Farbtyp 3 (indexierte Farbe) unerlässlich. Es ist optional für Farbtypen 2 und 6 (Truecolor und Truecolor mit Alpha) und darf nicht für die Farbtypen 0 und 4 (Graustufen und Graustufen mit Alpha) angezeigt werden.

Nebenbrocken

Andere Bildattribute, die in PNG -Dateien gespeichert werden können Gamma Werte, Hintergrundfarbe und Text Metadaten Information. PNG unterstützt auch Farbmanagement durch die Einbeziehung von ICC -Farbprofile.[19]

  • BKGD Gibt die Standard -Hintergrundfarbe an. Es ist für die Verwendung gedacht, wenn keine bessere Auswahl verfügbar ist, z.
  • Chrm gibt die Chromatizität Koordinaten der Anzeige Vorwahlen und Weißer Punkt.
  • DSIG ist zum Speichern digitaler Unterschriften.[20]
  • exif Shops Exif Metadaten.[21]
  • Gama an Gamma. Der Gama -Chunk enthält nur 4 Bytes, und sein Wert repräsentiert den Gammawert multipliziert mit 100.000; Beispielsweise berechnet der Gamma -Wert 1/3.4 auf 29411.7647059 ((1/3,4)*(100.000)) und wird zur Speicherung in eine Ganzzahl (29412) umgewandelt.[22]
  • Hist Kann das Histogramm oder die Gesamtmenge jeder Farbe im Bild speichern.
  • ICCP ist ein ICC -Farbprofil.
  • itxt enthält ein Schlüsselwort und UTF-8 Text mit Codierungen für eine mögliche Komprimierung und Übersetzungen mit markiertem mit Sprachetikett. Das Erweiterbare Metadatenplattform (XMP) verwendet diesen Chunk mit einem Schlüsselwort 'XML: com.adobe.xmp'
  • Phys Hält die beabsichtigte Pixelgröße (oder Pixel -Seitenverhältnis); Das Phys enthält "Pixel pro Einheit, x -Achse" (4 Bytes), "Pixel pro Einheit, Y -Achse" (4 Bytes) und "Einheitspezifizierer" (1 Byte) für insgesamt 9 Bytes.[23]
  • sbit (signifikante Bits) zeigt die Farbkonkurrierung der Quelldaten an; Dieser Chunk enthält je nach Farbtyp insgesamt zwischen 1 und 5 Bytes.[24][25][26]
  • spt schlägt eine Palette vor, die verwendet werden muss, wenn die gesamte Farbpalette nicht verfügbar ist.
  • SRGB zeigt an, dass der Standard SRGB Farbraum wird genutzt; Der SRGB -Chunk enthält nur 1 Byte, das für "Rendering -Absichten" verwendet wird (4 Werte - 0, 1, 2 und 3 - werden für die Rendernabsicht definiert).[27]
  • Ster Stereo-Image-Indikator-Chunk für stereoskopisch Bilder.[28]
  • Text kann Text speichern, der in in dargestellt werden kann ISO/IEC 8859-1, mit einer Schlüsselwert Paar für jeden Chunk. Der "Schlüssel" muss zwischen 1 und 79 Zeichen lang sein. Separator ist ein Nullcharakter. Der "Wert" kann eine beliebige Länge sein, einschließlich Null bis zur maximal zulässigen Blockgröße abzüglich der Länge des Schlüsselworts und des Trennzeichens. Weder "Schlüssel" oder "Wert" können Nullzeichen enthalten. Führende oder nachfolgende Räume werden ebenfalls nicht zugelassen.
  • Zeit speichert die Zeit, in der das Bild zuletzt geändert wurde.
  • trns Enthält Transparenzinformationen. Für indizierte Bilder werden Alpha -Kanalwerte für eine oder mehrere Paletteneinträge gespeichert. Für Truecolor- und Graustufenbilder speichert es einen einzelnen Pixelwert, der als vollständig transparent angesehen werden soll.
  • ztxt Enthält komprimierter Text (und einen Komprimierungsmethodenmarker) mit den gleichen Grenzen wie Text.

Der erste Buchstaben in diesen Stücken zeigt an, dass sie für die PNG -Spezifikation nicht benötigt werden. Der letzte Buchstaben in einigen Teilen zeigt an, dass sie sicher zu kopieren sind, auch wenn die betroffene Bewerbung sie nicht versteht.

Pixelformat

PNG -Farbtyp[9]
Farbtyp Kanäle Bits pro Kanal
1 2 4 8 16
Indiziert 1 1 2 4 8
Graustufen 1 1 2 4 8 16
Graustufen und Alpha 2 16 32
Wahre Farbe 3 24 48
Truecolor und Alpha 4 32 64

Pixel in PNG -Bildern sind Zahlen, die entweder Indizes von Beispieldaten in der Palette oder die Beispieldaten selbst. Die Palette ist eine separate Tabelle, die im PLTE -Stück enthalten ist. Beispieldaten für eine einzelne Pixel besteht aus einem Tupel zwischen einer und vier Zahlen. Unabhängig davon Kanäle und jede Zahl im Bild wird mit einem identischen Format codiert.

Die zulässigen Formate codieren jede Zahl als vorzeichenlosen Ganzzahlwert unter Verwendung einer festen Anzahl von Bits, die in der PNG -Spezifikation als die genannt wird Bitstiefe. Beachten Sie, dass dies nicht dasselbe ist wie Farbtiefe, der üblicherweise verwendet wird, um die Gesamtzahl der Bits in jedem Pixel zu beziehen, nicht auf jeden Kanal. Die zulässigen Bit -Tiefen sind in der Tabelle zusammen mit der Gesamtzahl der für jedes Pixel verwendeten Bits zusammengefasst.

Die Anzahl der Kanäle hängt davon ab, ob das Bild Graustufen oder Farbe ist und ob es eine hat Alpha -Kanal. PNG ermöglicht die folgenden Kombinationen von Kanälen, die als die genannt werden Farbtyp.

Eine Demonstration der Farbtiefe in einer PNG -Datei in Bits pro Kanal. Links: 8 Bit, rechts: 16 Bit. Beachten Sie das Artefakte, angepasster Kontrast für Klarheit.
0 (0002) Graustufen
2 (0102) Rot, Grün und Blau: RGB/Truecolor
3 (0112) Indexiert: Kanal mit Indizes in eine Farbenpalette enthält
4 (1002) Graustufen und Alpha: Niveau von Opazität Für jedes Pixel
6 (1102) Rot, Grün, Blau und Alpha

Der Farbtyp wird als 8-Bit-Wert angegeben. Es werden jedoch nur die niedrigen 3 Bit verwendet, und selbst dann sind nur die fünf oben aufgeführten Kombinationen zulässig. Solange der Farbtyp gültig ist, kann er als Bitfeld betrachtet werden, wie in der angrenzenden Tabelle zusammengefasst:

PNG -Farbtypen
Farbe
Typ
Name Binär Masken
  A C P
0 Graustufen 0 0 0 0  
2 Wahre Farbe 0 0 1 0 Farbe
3 Indiziert 0 0 1 1 Farbpalette
4 Graustufen und Alpha 0 1 0 0 Alpha
6 Truecolor und Alpha 0 1 1 0 Alpha, Farbe
  • Bitwert 1: Die Bilddaten speichern Palettenindizes. Dies ist nur in Kombination mit Bitwert 2 gültig;
  • Bitwert 2: Die Bildproben enthalten drei Kanäle der Datencodierung Trichromatisch FarbenAndernfalls enthalten die Bildproben einen Kanal der Datencodierung relative Luminanz,
  • Bitwert 4: Die Bildproben enthalten auch einen Alpha -Kanal, der als lineares Maß für die Deckkraft des Pixels ausgedrückt wird. Dies ist in Kombination mit Bitwert 1 nicht gültig.

Mit indizierten Farbbildern speichert die Palette immer trichromatische Farben in einer Tiefe von 8 Bit pro Kanal (24 Bit pro Paletteneintrag). Zusätzlich kann eine optionale Liste von 8-Bit-Alpha-Werten für die Paletteneinträge enthalten sein. Wenn nicht enthalten oder kürzer als die Palette, wird angenommen, dass die verbleibenden Paletteneinträge undurchsichtig sind. Die Palette darf nicht mehr Einträge haben als die Bildbit-Tiefe zulässt, es kann jedoch weniger haben (z. B. wenn ein Bild mit 8-Bit-Pixeln nur 90 Farben verwendet, benötigt sie keine Paletteneinträge für alle 256 Farben). Die Palette muss Einträge für alle im Bild enthaltenen Pixelwerte enthalten.

Mit dem Standard können indexierte FarbpnGs 1, 2, 4 oder 8 Bit pro Pixel haben. Graustufenbilder ohne Alpha -Kanal können 1, 2, 4, 8 oder 16 Bit pro Pixel haben. Alles andere verwendet etwas Tiefe pro Kanal von 8 oder 16. Die Kombinationen, die dies zulässt, sind in der obigen Tabelle angegeben. Der Standard erfordert, dass Decoder alle unterstützten Farbformate lesen können, aber viele Bildredakteure können nur eine kleine Teilmenge davon produzieren.

Transparenz des Bildes

PNG bietet eine Vielzahl von Transparenzoptionen. Mit echten Farben und Graustufenbildern kann entweder ein einzelner Pixelwert als transparent oder als als Alpha -Kanal Kann hinzugefügt werden (ermöglicht einen beliebigen Prozentsatz der teilweisen Transparenz). Für Palettierbilder können Alpha -Werte zu Paletteneinträgen hinzugefügt werden. Die Anzahl der gespeicherten Werte kann geringer sein als die Gesamtzahl der Paletteneinträge. In diesem Fall werden die verbleibenden Einträge als vollständig undurchsichtig angesehen.

Das Scannen von Pixelwerten für binäre Transparenz soll vor einer Farbreduktion durchgeführt werden, um zu vermeiden, dass Pixel ungewollt transparent werden. Dies ist am wahrscheinlichsten ein Problem für Systeme, das 16-Bit-pro-Kanal-Bilder dekodieren kann (wie es für die Einhaltung der Spezifikation erforderlich ist), jedoch nur mit 8 Bit pro Kanal (die Norm für alle außer den höchsten Endsystemen) ausgegeben wird, sondern nur aus dem Ausgang. .

Alpha Lagerung kann "assoziiert" sein ("Premultipliniert") oder" nicht assoziiert ", aber PNG standardisiert[29] auf "nicht assoziiert" ("nicht premultiplied") Alpha, was bedeutet, dass Bilder kein Alpha sind codiert; Die in RGB dargestellten Emissionen sind nicht die Emissionen auf Pixelebene. Dies bedeutet, dass der Over Operation die RGB -Emissionen mit dem Alpha multiplizieren und keine Emission und Okklusion nicht richtig darstellen können.

Kompression

Beispiel mit verschiedenen Arten von Bildinhalten
Darstellung der Bitkosten pro Pixel für die obige PNG -Datei (rot = teur, blau = billig)

PNG verwendet einen 2-stufigen Komprimierungsprozess:

  • Vorkompression: Filterung (Vorhersage)
  • Kompression: Deflate

PNG verwendet Deflate, ein nicht patentierter Verlustlose Datenkomprimierung Algorithmus mit einer Kombination von LZ77 und Huffman -Codierung. Zulässt lizenziert Implementierungen entleeren, wie z. Zlib, sind weit verbreitet.

Im Vergleich zu Formaten mit Verlustige Komprimierung JPEG wie die Auswahl einer Komprimierungseinstellung über die durchschnittliche Verzögerungsverarbeitung, jedoch häufig zu einer signifikant kleineren Dateigröße.

Filterung

Die Filtermethode 0 von PNG kann die Daten in Pixel A, B und C verwenden, um den Wert für x vorherzusagen.
Ein PNG mit 256 Farben, das nur 251 Bytes groß ist, mit Vorfilter. Das gleiche Bild wie ein GIF wäre mehr als dreizehnmal größer.

Bevor die Deflate angewendet wird, werden die Daten über eine Vorhersagemethode transformiert: eine einzelne Filtermethode wird für das gesamte Bild verwendet, während für jede Bildlinie a Filter Typ wird ausgewählt, um die Daten zu transformieren, um sie effizienter komprimierbar zu machen.[30] Der für eine Scanline verwendete Filtertyp wird an der Scanline vorbereitet, um die Inline -Dekompression zu ermöglichen.

Es gibt nur eine Filtermethode in der aktuellen PNG -Spezifikation (bezeichneter Methode 0), und in der Praxis ist die einzige Wahl, welcher Filtertyp für jede Zeile angewendet werden soll. Für diese Methode prognostiziert der Filter den Wert jedes Pixels basierend auf den Werten früherer benachbarter Pixel und subtrahiert die vorhergesagte Farbe des Pixels vom tatsächlichen Wert wie in DPCM. Eine auf diese Weise gefilterte Bildlinie ist oft komprimierbarer als die Rohbildlinie, insbesondere wenn sie der obigen Linie ähnlich ist, da die Unterschiede zur Vorhersage im Allgemeinen um 0 gruppiert werden, anstatt sich über alle möglichen Bildwerte zu verteilt. Dies ist besonders wichtig für die Beziehung zwischen getrennten Zeilen, da Deflate kein Verständnis hat, dass ein Bild eine 2D -Entität ist und stattdessen die Bilddaten als Stream von Bytes sieht.

Es gibt fünf Filtertypen für die Filtermethode 0; Jeder Typ prognostiziert den Wert jedes Byte (der Bilddaten vor Filtern) basierend auf dem entsprechenden Byte des Pixels links (links (A), das Pixel oben (B) und das Pixel oben und links (C) oder eine Kombination davon und kodiert die Unterschied zwischen dem vorhergesagten Wert und dem tatsächlichen Wert. Filter werden auf Bytewerte angewendet, nicht auf Pixel; Pixelwerte können ein oder zwei Bytes oder mehrere Werte pro Byte sein, aber niemals Bytegrenzen überschreiten. Die Filtertypen sind:[31]

Geben Sie Byte ein Filtername Vorhergesagter Wert
0 Keiner Null (so dass der Roh -Byte -Wert unverändert durchläuft)
1 Sub Byte A (Nach links)
2 Hoch Byte B (Oben)
3 Durchschnitt Mittelwert von Bytes A und B, abgerundet
4 Paeth A, B, oder C, was auch immer ist, der am nächsten ist p = A + BC

Der PAETH -Filter basiert auf einem Algorithmus von Alan W. Paeth.[32] Vergleichen Sie mit der Version von DPCM benutzt in Verlustloser JPEGund zur Diskrete Wavelet -Transformation unter Verwendung von 1 × 2, 2 × 1 oder (für den PAeth -Prädiktor) 2 × 2 Fenster und Haarwavelets.

Die Komprimierung wird weiter verbessert, indem Filtertypen anpassungsfähig ausgewählt werden. Diese Verbesserung und eine heuristische Methode zur Implementierung der PNG-Schreibsoftware wurden von erstellt von Lee Daniel Crocker, der die Methoden auf vielen Bildern während der Erstellung des Formats testete;[33] Die Auswahl des Filters ist eine Komponente der Dateigrößenoptimierung, wie nachstehend erläutert.

Wenn eine Interlacing verwendet wird, wird jede Stufe der Interlacing separat gefiltert, was bedeutet, dass das Bild nach Empfang progressiv gerendert werden kann. Die Zusammenfassung macht die Kompression jedoch im Allgemeinen weniger effektiv.

Interlacing

Eine Abbildung von ADAM7 -Interlacing über ein 16 × 16 -Bild.

PNG bietet einen optionalen 2-dimensionalen 7-Pass Interlacing Schema - das ADAM7 -Algorithmus. Dies ist anspruchsvoller als das 1-dimensionale 4-Pass-Schema von GIF und ermöglicht es, dass ein klareres Bild mit niedriger Auflösung früher in der Übertragung sichtbar ist, insbesondere wenn Interpolationsalgorithmen wie z. Bicubic Interpolation werden verwendet.[34]

Das 7-Pass-Schema verringert jedoch tendenziell die Kompressibilität der Daten mehr als einfachere Schemata.

Animation

Eine APNG (animierte PNG) -Datei (Zeigt als statisches Bild in an Einige Webbrowser)

PNG selbst unterstützt keine Animation. Mng ist eine Erweiterung auf PNG, die dies tut; Es wurde von Mitgliedern der PNG -Gruppe entworfen. MNG teilt die grundlegende Struktur und die Brocken von PNG, ist jedoch erheblich komplexer und verfügt über eine andere Dateisignatur, die automatisch mit Standard -PNG -Decodern nicht kompatibel ist, was dazu führte, dass MNG von den meisten Webbrowsern oder Anwendungen fast nicht unterstützt oder unterstützt wurde.

Die Komplexität von MNG führte zum Vorschlag von APNG von Entwicklern der Mozilla Foundation. Es basiert auf PNG, unterstützt die Animation und ist einfacher als MNG. APNG bietet einen Fallback zum Einzelbild-Display für PNG-Decoder, die APNG nicht unterstützen. Heute wird das APNG -Format derzeit von allen großen Webbrowsern unterstützt.[35] APNG wird in unterstützt Feuerfuchs 3.0 und Up, Blasser Mond (alle Versionen) und die neueste Version von Oper Unterstützen Sie APNG, da der Motor in Blink geändert wurde. Die neueste Version von Safari an iOS 8 und safari 8 für OS X YosemiteSie verwenden Webkit Engine, die APNG unterstützen.[36] Chrom 59.0 hat APNG -Unterstützung hinzugefügt[37][38] Und es folgte Google Chrome. Microsoft Edge unterstützt jetzt APNG mit dem neuen Chrom -Basis -Motor.

Die PNG -Gruppe entschied im April 2007, APNG nicht zu nutzen.[39] Mehrere Alternativen wurden diskutiert, Ang, Anim/MPNG, "PNG in GIF" und seine Untergruppe "RGBA in GIF".[40] Derzeit wird jedoch nur APNG von allen großen Webbrowsern unterstützt.[35]

Beispiele

Struktur einer sehr einfachen PNG -Datei
89 50 4E 47 0D 0A 1A 0A
PNG Signatur
IHDR
Bildheader
IDAT
Bilddaten
IEND
Bildende
Inhalt einer minimalen PNG -Datei, die ein rotes Pixel darstellt
Verhexen Als Charaktere

89 50 4e 47 0d 0a 1a 0a 00 00 00 0d 49 48 44 52
00 00 00 01 00 00 00 01 08 02 00 00 00 90 77 53
De 00 00 00 0c 49 44 41 54 08 D7 63 F8 CF C0 00
00 03 01 01 00 18 DD 8d B0 00 00 00 00 49 45 4E
44 ae 42 60 82

.Png ........ ihdr
.............. ws
..... idat..c ....
............. ien
D.b`.

Ihdr Chunk
In das Chunk versetzen Sechskantwert Dezimalwert Text Bedeutung
0 0x0d 13 IHDR Chunk hat 13 Bytes Inhalt
4 0x49484452 Ihdr Identifiziert einen Header -Chunk
8 0x01 1 Bild ist 1 Pixel breit
12 0x01 1 Bild ist 1 Pixel hoch
16 0x08 8 8 Bit pro Pixel (pro Kanal)
17 0x02 2 Farbtyp 2 (RGB/Truecolor)
18 0x00 0 Komprimierungsmethode 0 (nur akzeptierter Wert)
19 0x00 0 Filtermethode 0 (nur akzeptierter Wert)
20 0x00 0 Nicht miteinander verbunden
21 0x907753de CRC von Chunk -Typ und Inhalt (aber nicht Länge)
Idat -Chunk
In das Chunk versetzen Sechskantwert Bedeutung
0 0x0c Idat Chunk hat 12 Bytes Inhalt
4 0x49444154 Identifiziert einen Datenblock
8 0x08 Entled-Komprimierungsmethode unter Verwendung eines 256-Byte-Fensters[41]
9 0xd7 ZLIB FCECK -Wert, kein Wörterbuch verwendet, maximaler Komprimierungsalgorithmus[41]
10 0x63f8cfc00000 Ein komprimierter Deflateblock unter Verwendung des statischen Huffman -Codes, der auf 0x00 0xff 0x00 0x00 decodiert[42]
16 0x03010100 Der ZLIB -Überprüfungswert: Die adler32 -Prüfsumme der unkomprimierten Daten[41]
20 0x18dd8db0 CRC von Chunk -Typ und Inhalt (aber nicht Länge)

In der Art von angezeigt Hex -Redakteure, mit auf den linken Seiten Byte -Werten in gezeigt in Hex -Formatund auf der rechten Seite ihre äquivalenten Charaktere von ISO-8859-1 durch nicht anerkannte und kontrollierte Zeichen, die durch Perioden ersetzt wurden. Zusätzlich sind die PNG -Signatur und die einzelnen Stücke mit Farben gekennzeichnet. Beachten Sie, dass sie aufgrund ihrer lesbaren Typ -Namen von Menschen leicht zu identifizieren sind (in diesem Beispiel PNG, IHDR, IDAT und Iend).

Vorteile

Gründe für die Verwendung dieses internationalen Standards können sein:

  • Portabilität: Die Übertragung ist unabhängig von der Software- und Hardwareplattform.
  • Vollständigkeit: Es ist möglich, Truecolor-, Indexed-Color- und Grauskala-Bilder darzustellen.
  • Codierung und Dekodierung in Reihe: Ermöglicht das Generieren und Lesen von Datenströmen in Reihe, dh das Format des Datenstroms wird derzeit durch serielle Kommunikation zur Erzeugung und Visualisierung von Bildern verwendet.
  • Progressive Präsentation: Um Datenflüsse zu übertragen, die zunächst eine Annäherung des gesamten Bildes sind, und zunehmend verbessern sie, wenn der Datenfluss empfangen wird.
  • Geräusch zu Übertragungsfehlern: Erkennt die Übertragungsfehler des Datenstroms korrekt.
  • Verlustlosigkeit: Kein Verlust: Filterung und Komprimierung erhalten Sie alle Informationen.
  • Effizienz: Jede progressive Bildpräsentation, Komprimierung und Filterung sucht nach effizienter Dekodierung und Präsentation.
  • Kompression: Bilder können effizient und konsequent komprimiert werden.
  • Leichtigkeit: Die Implementierung des Standards ist einfach.
  • Austauschbarkeit: Jeder PNG -Decoder, der den Standards folgt, kann alle PNG -Datenströme lesen.
  • Flexibilität: Ermöglicht zukünftige Erweiterungen und private Ergänzungen, ohne den vorherigen Punkt zu beeinflussen.
  • Freiheit der rechtlichen Beschränkungen: Die verwendeten Algorithmen sind kostenlos und zugänglich.

Vergleich mit anderen Dateiformaten

Grafik -Austauschformat (GIF)

  • Auf kleinen Bildern, GIF kann eine stärkere Komprimierung erreichen als PNG (siehe die Abschnitt über Filesize, unter).
  • Bei den meisten Bildern, mit Ausnahme des obigen Falls, hat eine GIF -Datei eine größere Größe als ein indiziertes PNG -Bild.
  • PNG bietet eine viel größere Auswahl an Transparenzoptionen als GIF, einschließlich Alpha -Kanal Transparenz.
  • Während GIF auf 8-Bit begrenzt ist indizierte Farbe, PNG liefert eine viel größere Reihe von Farbtiefen, einschließlich 24-Bit (8 Bit pro Kanal) und 48-Bit (16 Bit pro Kanal). wahre Farbe, was mehr Farbpräzision, glattere Verblassen usw. ermöglichen.[43] Wenn ein Alpha -Kanal hinzugefügt wird, sind bis zu 64 Bit pro Pixel (vor der Komprimierung) möglich.
  • Beim Konvertieren eines Bildes aus dem PNG -Format in GIF kann die Bildqualität darunter leiden Posterisierung Wenn das PNG -Bild mehr als 256 Farben hat.
  • GIF unterstützt animierte Bilder intrinsisch. PNG unterstützt die Animation nur über inoffizielle Erweiterungen (siehe die Abschnitt über Animation, Oben).

PNG -Bilder werden von älteren Browsern weniger häufig unterstützt. Insbesondere hat IE6 eine begrenzte Unterstützung für PNG.[44]

JPEG

Zusammengesetzter Bild, der eine verlustige Komprimierung in JPEG mit verlustfreier Komprimierung in PNG vergleicht: Die JPEG -Artefakte können im Hintergrund dieser Art von Bilddaten leicht sichtbar sein, wobei das PNG -Bild eine solide Farbe hat.

Das JPEG (Gemeinsame fotografische Expertengruppe) Format kann eine kleinere Datei erstellen als PNG für fotografisch (und photoartige) Bilder, da JPEG a verwendet Verlustige Codierungsmethode speziell für fotografische Bilddaten entwickelt, die typischerweise von weichen, geringen Übergängen und einer Menge an Rauschen oder ähnlichen unregelmäßigen Strukturen dominiert werden. Die Verwendung von PNG anstelle eines hochwertigen JPEG für solche Bilder würde zu einer großen Zunahme der Dateigröße mit führen unerheblich Qualitätsgewinnung. Im Vergleich dazu kann das PNG -Format beim Speichern von Bildern, die Text, Zeilenkunst oder Grafiken enthalten - Bilder mit scharfen Übergängen und großen Bereichen mit fester Farbe - mehr als JPEG komprimieren. Zusätzlich ist PNG verlustlos, während JPEG visuelle Artefakte in rund kontrastischen Bereichen produziert. (Solche Artefakte hängen von den Einstellungen ab die beiden Effekte. JPEG unterstützt keine Transparenz.

JPEGs verletzte Komprimierung leidet ebenfalls unter Generierungsverlust, wo das wiederholte Dekodieren und Neukodieren eines Bildes, um es wieder zu speichern, verursacht jedes Mal einen Informationsverlust und verschlechtert das Bild. Da PNG verlustlos ist, ist es geeignet, Bilder zu speichern, die bearbeitet werden sollen. Während PNG beim Komprimieren fotografischer Bilder einigermaßen effizient ist, gibt es verlustlose Komprimierungsformate, die speziell für fotografische Bilder entwickelt wurden, verlustlos Webp und Adobe DNG (Digital negativ) zum Beispiel. Diese Formate werden jedoch entweder nicht weit verbreitet oder proprietär. Ein Bild kann verlängert und nur für die Verteilung in das JPEG -Format umgewandelt werden, so dass kein Erzeugungsverlust vorliegt.

Während die PNG -Spezifikation nicht explizit einen Standard zum Einbettung enthält Exif Bilddaten aus Quellen wie Digitalkameras, der bevorzugten Methode zum Einbetten von EXIF-Daten in ein PNG, besteht darin, das nicht kritische Zusatz-Chunk-Etikett zu verwenden exif.[45]

Frühe Webbrowser unterstützten keine PNG -Bilder. JPEG und GIF waren die Hauptbildformate. JPEG wurde üblicherweise verwendet, wenn Bilder mit Gradienten für Webseiten exportiert wurden, da die begrenzte Farbtiefe von GIF enthielt. JPEG -Kompression führt jedoch dazu, dass ein Gradient leicht verschwommen ist. Ein PNG -Format reproduziert einen Gradienten so genau wie möglich für eine bestimmte Tiefe, während die Dateigröße klein bleibt. PNG wurde zur optimalen Wahl für kleine Gradientenbilder, da die Unterstützung des Webbrowsers für das Format verbessert wurde. Es werden überhaupt keine Bilder benötigt, um Gradienten in modernen Browsern anzuzeigen CSS.

JPEG-LS

JPEG-LS ist ein Bildformat von der Gemeinsame fotografische Expertengruppeobwohl weitaus weniger bekannt und unterstützt als das andere oben diskutierte Verlust -JPEG -Format. Es ist direkt vergleichbar mit PNG,[Klarstellung erforderlich] und hat einen Standardsatz von Testbildern.[46] Auf dem Waterloo Repertoire Colorset, einem Standardsatz von Testbildern (nicht mit dem JPEG-LS-Konformitätstest-Set verbunden), wird JPEG-LS im Allgemeinen besser als PNG um 10–15%abgebildet, aber auf einigen Bildern wird PNG wesentlich besser abschneid Reihenfolge von 50–75%.[47] Wenn diese beiden Formate Optionen sind und die Dateigröße ein wichtiges Kriterium ist, sollten sie je nach Bild in Betracht gezogen werden.

Tiff

Tagged Bilddateiformat (TIFF) ist ein Format, das eine extrem breite Palette von Optionen enthält. Dies macht TIFF als generisches Format für den Austausch zwischen professionellen Bildbearbeitungsanwendungen nützlich, unterstützt das Hinzufügen von Anwendungen zu einer viel größeren Aufgabe und bietet daher nur wenig Unterstützung bei Anwendungen, die sich nicht mit Bildmanipulation befassen (wie Webbrowser). Die hohe Erweiterbarkeit bedeutet auch, dass die meisten Anwendungen nur eine Teilmenge möglicher Funktionen bereitstellen und möglicherweise Probleme mit der Verwirrung und Kompatibilität von Benutzern erzeugen.

Der mit TIFF verwendete allgemeine, verlustlose Kompressionsalgorithmus ist der häufigste allgemeine, verlustlose Kompressionsalgorithmus Lempel -Ziv -Welch (LZW). Diese Kompressionstechnik, die ebenfalls in GIF verwendet wurde, wurde bis 2003 von Patenten bedeckt. TIFF unterstützt auch den Komprimierungsalgorithmus PNG verwendet (d.h. Kompressionstag 000816 'Adobe-Style ') mit mittlerer Verwendung und Unterstützung durch Anwendungen. TIFF bietet auch spezielle verlustfreie Komprimierungsalgorithmen wie CCitt Group IV, was komprimieren kann Bilevel -Bilder (z. B. Faxe oder Schwarzweißtext) besser als PNGs Komprimierungsalgorithmus.

PNG unterstützt nur nicht premultiplimiertes Alpha[29] TIFF unterstützt auch "assoziierte" (Prämultiplied) Alpha.

Software-Unterstützung

Das offizielle Referenzimplementierung des PNG -Formats ist das Programmierbibliothek libpng.[48] Es wird als kostenlose Software unter den Bedingungen von a veröffentlicht Zulässige freie Softwarelizenz. Daher wird es normalerweise als wichtige Systembibliothek in freien Betriebssystemen gefunden.

Bitmap Graphics Editor Support für PNG

Das PNG -Format wird von Grafikprogrammen, einschließlich der Grafikprogramme, häufig unterstützt Adobe Photoshop, Corel's Photo-Paint und Paint Shop Pro, das Gimp, GraphicConverter, Helikonfilter, Imagemagick, Inkscape, Irfanview, Pixel Image Editor, Paint.net und Xara Foto & Grafikdesigner und viele andere. Einige Programme mit beliebtem Programmen Betriebssysteme Welche Unterstützung PNG umfassen Microsoft's Farbe und Apfel's Fotos/iPhoto und Vorschau, mit dem Gimp, der auch oft mit beliebtem Bündel gebündelt wird Linux Verteilungen.

Adobe Feuerwerk (früher von Makromedia) verwendet PNG als natives Dateiformat, sodass andere Bildredakteure und Vorschau -Dienstprogramme das abgeflachte Bild angezeigt werden können. Das standardmäßige Feuerwerk speichert jedoch auch Metadaten für Ebenen, Animation, Vektordaten, Text und Effekte. Solche Dateien sollten nicht direkt verteilt werden. Feuerwerk kann stattdessen das Bild als optimierte PNG ohne die zusätzlichen Metadaten für die Verwendung auf Webseiten usw. exportieren.

Webbrowser -Unterstützung für PNG

PNG -Unterstützung erschien erstmals 1997 in Internet Explorer 4,0b1 (32-Bit nur für NT) und in Netscape 4.04.[49]

Trotz der Anrufe von der Kostenlose Software -Stiftung[50] und die World Wide Web Konsortium (W3C),[51] Tools wie Gif2png,[52] und Kampagnen wie Burn alle GIFs,[53] Die Einführung von PNG auf Websites war aufgrund der späten und fehlerhaften Unterstützung im Internet Explorer ziemlich langsam, insbesondere in Bezug auf Transparenz.[54]

PNG kompatible Browser umfassen: Apple Safari, Google Chrome, Mozilla Firefox, Oper, Camino, Internet Explorer 7 (immer noch zahlreiche Probleme),[55] Internet Explorer 8 (immer noch einige Probleme), Internet Explorer 9 und viele andere. Für den vollständigen Vergleich siehe Vergleich von Webbrowsern (Bildformatunterstützung).

Insbesondere Versionen von Internet Explorer (Windows) unter 9.0 (veröffentlicht 2011) haben zahlreiche Probleme, die verhindern, dass sie PNG -Bilder korrekt rendern.[55]

  • 4.0 Abstürze auf großen PNG -Stücken.[56]
  • 4.0 enthält nicht die Funktionalität zum Anzeigen von .png -Dateien,[57] Aber es gibt eine Registrierungsreparatur.[55]
  • 5.0 und 5.01 haben die Unterstützung von Objekten gebrochen.[58]
  • 5.01 druckt Palettenbilder mit schwarzen (oder dunkelgrauen) Hintergründen unter Windows 98, manchmal mit radikal veränderten Farben.[59]
  • 6.0 zeigt PNG -Bilder von 4097 oder 4098 Bytes nicht an.[60]
  • 6.0 kann keine PNG-Datei öffnen, die eine oder mehrere IDAT-Stücke mit Nulllängen enthält. Dieses Problem wurde erstmals in Security Update 947864 (MS08-024) behoben. Weitere Informationen finden Sie in diesem Artikel in der Microsoft Knowledge Base: 947864 MS08-024: Kumulative Sicherheits-Update für Internet Explorer.[61]
  • 6.0 Manchmal verliert manchmal die Fähigkeit, PNGs anzuzeigen, aber es gibt verschiedene Korrekturen.[62]
  • 6.0 und unten haben die Unterstützung der Alpha-Channel-Transparenz gebrochen (zeigt stattdessen die Standard-Hintergrundfarbe an).[63][64][65]
  • 7.0 und darunter können 8-Bit-Alpha-Transparenz und Elementdeckigkeit nicht kombinieren (Deckkraft (Element) (CSS - Filter: Alpha (Opazität = xx)), ohne teilweise transparente Abschnitte mit Schwarz zu füllen.[66]
  • 8.0 und unten haben eine inkonsistente/kaputte Gamma -Unterstützung.[55]
  • 8.0 und unten haben keine Farbkorrekturunterstützung.[55]

Betriebssystemunterstützung für PNG -Symbole

PNG -Symbole wurden in den meisten Verteilungen von unterstützt Linux seit mindestens 1999 in Desktop -Umgebungen wie z. Gnom.[67] In 2006, Microsoft Windows Die Unterstützung für PNG -Ikonen wurde in eingeführt Windows Vista.[68] PNG -Symbole werden in unterstützt Amigaos 4, Aros, Mac OS, iOS und Morphos auch. Zusätzlich, Android nutzt die PNGs ausführlich.

Dateigröße und Optimierungssoftware

Die Größe der PNG -Datei kann je nachdem, wie sie codiert und komprimiert ist. Dies wird diskutiert und eine Reihe von Tipps werden in angegeben PNG: Der endgültige Leitfaden.[47]

Im Vergleich zu GIF

Verglichen mit GIF Dateien, eine PNG -Datei mit denselben Informationen (256 Farben, keine Zusatzböcke/Metadaten), die durch einen effektiven Kompressor komprimiert wird, ist normalerweise kleiner als ein GIF -Bild. Abhängig von der Datei und dem Kompressor kann PNG von etwas kleiner (10%) bis signifikant kleiner (50%) bis etwas größer (5%) reichen, ist jedoch selten signifikant größer[47] für große Bilder. Dies wird auf die Leistung von PNGs zurückgeführt Deflate Im Vergleich zu GIF's LZWund weil die zusätzliche Vorkompressionsschicht der prädiktiven Filter von PNG die zweidimensionale Bildstruktur berücksichtigen, um Dateien weiter zu komprimieren; Da gefilterte Daten Unterschiede zwischen Pixel codieren, neigen sie dazu, sich näher an 0 zu schließen, anstatt alle möglichen Werte über die Ausbreitung zu verteilt, und werden somit leichter durch Deflate komprimiert. Einige Versionen von jedoch Adobe Photoshop, Coreldraw und Frau Farbe Stellen Sie eine schlechte PNG -Komprimierung vor und erzeugen den Eindruck, dass GIF effizienter ist.[47]

Dateigröße Faktoren

PNG -Dateien variieren in der Größe aufgrund einer Reihe von Faktoren:

Farbtiefe
Die Farbtiefe kann zwischen 1 und 64 Bit pro Pixel liegen.
Nebenbrocken
PNG unterstützt Metadaten - dies kann für die Bearbeitung nützlich sein, aber für die Anzeige unnötig, wie auf Websites.
Interlacing
Da jeder Durchgang des ADAM7 -Algorithmus separat gefiltert wird, kann dies die Dateigröße erhöhen.[47]
Filter
Als Vorkompressionsstadium wird jede Zeile durch einen Vorhersagefilter gefiltert, der sich von Linie zu Linie ändern kann. Da der ultimative Deflate-Schritt mit den gefilterten Daten des gesamten Bildes funktioniert, kann man diese Zeilen-für-Reihe nicht optimieren. Die Wahl des Filters für jede Zeile ist daher möglicherweise sehr variabel, obwohl Heuristiken vorhanden sind.[Anmerkung 1]
Kompression
Mit zusätzlicher Berechnung können Deflatkompressoren kleinere Dateien erstellen.

Es gibt daher einen Kompromiss zwischen hoher Farbtiefe, maximaler Metadaten (einschließlich Farbrauminformationen sowie Informationen, die sich nicht auf die Anzeige auswirken), Interlacing und Komprimierungsgeschwindigkeit, die alle großen Dateien mit geringerer Farbtiefe, weniger, weniger oder keine Nebenstücke, keine Interlacing und nicht abgestimmte, aber rechenintensive Filterung und Komprimierung. Für verschiedene Zwecke werden unterschiedliche Kompromisse ausgewählt: Eine maximale Datei kann am besten zum Archivieren und Bearbeiten geeignet sein, während eine abgespeckte Datei am besten für die Verwendung auf einer Website geeignet ist, und ebenso schnell, aber eine schlechte Komprimierung wird bevorzugt, wenn sie wiederholt bearbeiten und sparen a Datei, während eine langsame, aber hohe Komprimierung bevorzugt wird, wenn eine Datei stabil ist: beim Archivieren oder Beitrag. Die Interlacing ist ein Kompromiss: Es beschleunigt die frühzeitige Darstellung großer Dateien (verbessert die Latenz), kann jedoch die Dateigröße (Durchsatz verringern) für wenig Gewinn erhöhen, insbesondere für kleine Dateien.[47]

Verlustige PNG -Kompression

Obwohl PNG ein verlustfreies Format ist, können PNG -Encoder die Bilddaten auf verletzungslose Weise vorbereiten, um die PNG -Komprimierung zu verbessern. Zum Beispiel ermöglicht die Quantisierung eines TrueColor -PNG bis 256 Farben, dass der indizierte Farbtyp für eine wahrscheinliche Verringerung der Dateigröße verwendet werden kann.[69]

Bildbearbeitungssoftware

Einige Programme sind effizienter als andere beim Speichern von PNG -Dateien. Dies bezieht sich auf die Implementierung der vom Programm verwendeten PNG -Komprimierung.

Viele Grafikprogramme (wie Apple's Vorschau Software) sparen Sie PNGs mit großen Mengen von Metadaten und Farbkorrekturdaten, die im Allgemeinen unnötig sind für Netz Betrachtung. Unoptimierte PNG -Dateien von Adobe Feuerwerk sind auch dafür berüchtigt, da sie Optionen enthalten, um das Bild in unterstützten Redakteuren bearbeitbar zu machen. Auch Coreldraw (mindestens Version 11) produziert manchmal PNGs, die nicht von Internet Explorer (Versionen 6–8) geöffnet werden können.

Adobe PhotoshopDie Leistung in PNG -Dateien hat sich in der CS -Suite verbessert, wenn die Save for Web -Funktion verwendet wird (was auch eine explizite PNG/8 -Verwendung ermöglicht).

Das Feuerwerk von Adobe spart größere PNG -Dateien als viele Programme standardmäßig. Dies stammt aus der Mechanik der ITS Speichern Format: Die Bilder, die von Fireworks 'Save -Funktion erzeugt werden, umfassen große, private Stücke, die vollständige Schicht- und Vektorinformationen enthalten. Dies ermöglicht eine weitere verlustfreie Bearbeitung. Wenn gerettet mit dem Export Option, die PNGs von Feuerwerkskörpern sind mit denen, die von anderen Bildredakteuren hergestellt wurden, konkurrenzfähig, aber nicht mehr als alles als abgeflachte Bitmaps bearbeitet werden. Fireworks kann keine vektor-editablen PNGs sparen.

Andere bemerkenswerte Beispiele für schlechte PNG -Kompressoren sind:

  • Microsoft -Farbe für Windows XP
  • Microsoft Bild! Fotopremium 9

Eine schlechte Komprimierung erhöht die PNG -Dateigröße, wirkt sich jedoch nicht auf die Bildqualität oder Kompatibilität der Datei mit anderen Programmen aus.

Wenn die Farbtiefe von a wahre Farbe Das Bild wird auf eine 8-Bit-Palette reduziert (wie in GIF), die resultierenden Bilddaten sind normalerweise viel kleiner. Somit ist ein Truecolor-PNG typischerweise größer als ein farbreduziertes GIF, obwohl PNG die farbreduzierte Version als palettisierte Datei mit vergleichbarer Größe speichern könnte. Umgekehrt speichern einige Tools beim Speichern von Bildern als PNGs sie automatisch als Truecolor, auch wenn die ursprünglichen Daten nur 8-Bit-Farbe verwenden, wodurch die Datei unnötig aufblüht.[47] Beide Faktoren können zu dem Missverständnis führen, dass PNG -Dateien größer sind als äquivalente GIF -Dateien.

Werkzeuge optimieren

Für die Optimierung von PNG -Dateien stehen verschiedene Tools zur Verfügung. Sie tun dies von:

  • (Optional) Entfernen von Zusatzböcken,
  • Reduzierung der Farbtiefe entweder:
    • Verwenden Sie eine Palette (anstelle von RGB), wenn das Bild 256 oder weniger Farben enthält.
    • Verwenden Sie eine kleinere Palette, wenn das Bild 2, 4 oder 16 Farben hat oder
    • (optional) Lust zu einigen Daten im Originalbild verwerfen.
  • Optimierung der Linien-für-Leitung-Filterauswahl und
  • Optimierung der Deflatkompression.

Werkzeugliste

  • pngcrush ist der älteste der beliebten PNG -Optimierer. Es ermöglicht mehrere Versuche bei Filterauswahl- und Komprimierungsargumenten und wählt schließlich den kleinsten. Dieses Arbeitsmodell wird in fast jedem PNG -Optimierer verwendet.
  • advpng und das ähnliche Advdef -Dienstprogramm im AdvanceComp -Paket fördern die PNG -IDAT. Abhängig von der ausgewählten Komprimierungsstufe, des Handels zwischen Geschwindigkeit und Dateigröße: ZLIB auf Stufe 1, libdeflate auf Stufe 2, werden unterschiedliche Deflat -Implementierungen angewendet, werden angewendet. 7-Zip's Lzma Deflate auf Stufe 3 und Zopfli auf Stufe 4.
  • pngout wurde mit dem eigenen Deflater des Autors (gleiche wie zum Zip -Dienstprogramm des Autors, KZIP), während alle Einrichtungen der Farbreduktion / -filterung beibehalten. PNGOUT ermöglicht jedoch nicht, mehrere Versuche an Filtern in einem einzigen Lauf zu verwenden. Es wird empfohlen, seine kommerzielle GUI -Version Pngoutwin oder mit a zu verwenden Verpackung Um die Versuche zu automatisieren oder sich mit einem eigenen Deflater zu widerzuspiegeln, während die Filterlinie für die Linie aufbewahrt wird.[Anmerkung 2]
  • Zopflipng wurde auch mit einem selbstunalen Deflater, Zopfli, hergestellt. Es verfügt über alle optimierenden Funktionen, die PNGCRUSH (einschließlich Automatisierung von Versuchen) und gleichzeitig einen sehr guten, aber langsamen Deflater bieten.

Ein einfacher Vergleich ihrer Funktionen ist unten aufgeführt.

Optimierer Klopfenentfernung Farbreduktion Filterung Filter Wiederverwendung[Notiz 3] Mehrere Versuche an Filtern in einem einzigen Lauf Deflater[Anmerkung 4]
advpng Ja Nein[Anmerkung 5] 0 Nein N / A[Anmerkung 6] (mehrere)
advdef Nein Nein Wiederverwendet früherer Filtersatz Stets N / A (mehrere)
pngcrush Ja Ja 0–4 oder adaptiv Nein Ja Zlib
pngout Ja Ja 0–4 oder adaptiv Ja[Anmerkung 2] Nein Kzip
Zopflipng Ja Ja 0–4 oder adaptiv mit 2 verschiedenen Algorithmen oder mit brutaler Weise Ja Ja Zopfli

Bevor ZopfliPng verfügbar war, besteht ein guter Weg in der Praxis, eine PNG -Optimierung durchzuführen, darin, eine Kombination von 2 Tools für eine optimale Komprimierung zu verwenden: eine, die Filter optimiert (und Zusatzstücke entfernt) und eine, die die Deflat optimiert. Obwohl PNGout beides bietet, kann nur ein Filtertyp in einem einzigen Lauf angegeben werden, daher kann er mit a verwendet werden Wrapper -Werkzeug oder in Kombination mit pngcrush,[Anmerkung 2] als neu des Flassers wie Advdef fungieren.

Nebenkostenentfernung

Zum Entfernen von Zusatzböcken können die meisten PNG -Optimierungswerkzeuge alle Farbkorrekturdaten aus PNG -Dateien (Gamma, Weißabgleich, ICC -Farbtonprofil, Standard -RGB -Farbprofil) entfernen. Dies führt häufig zu viel kleineren Dateigrößen. Beispielsweise erreichen die folgenden Befehlszeilenoptionen dies mit PNGCRUSH:

pngcrush -rem gama -rem chrm -rem iccp -rem srgb inputFile.png outputFile.png

Filteroptimierung

pngcrush, pngout und zopfliPng Alle bieten Optionen an, die einen der Filtertypen 0–4 global (mit demselben Filtertyp für alle Zeilen verwenden) oder mit einem "Pseudofilter" (nummeriert 5), der für jede Zeile einen der Filter auswählt Typen 0–4 mit einem adaptiven Algorithmus. ZOPFLIPNG bietet 3 verschiedene adaptive Methoden, einschließlich einer Brute-Force-Suche, die versucht, die Filterung zu optimieren.[Anmerkung 7]

Pngout und Zopflipng bieten eine Option zur Erhaltung/Wiederverwendung[Anmerkung 2][Anmerkung 8] Der Linien-für-Line-Filter ist im Eingabebild vorhanden.

PNGCRUSH und ZOPFLIPNG bieten Optionen, um verschiedene Filterstrategien in einem einzigen Lauf auszuprobieren und das Beste auszuwählen. Die Freeware -Befehlszeilenversion von PNGout bietet dies nicht, aber die kommerzielle Version Pngoutwin tut dies.[Anmerkung 9]

Entleeroptimierung

Zopfli und die LZMA SDK zur Verfügung stellen Deflate Implementierungen, die höher produzieren können Kompressionsverhältnisse als das Zlib Referenzimplementierung auf Kosten der Leistung. AdvanceComps advpng und advdef Kann eine dieser Bibliotheken verwenden, um PNG-Dateien neu zu komprimieren. Zusätzlich, Pngout enthält seine eigene proprietär Deflate Implementierung.

advpng Sie verfügt nicht über die Option, Filter anzuwenden, und verwendet filter 0 immer global (lassen Sie die Bilddaten nicht mehr). Daher sollte es nicht verwendet werden, wenn das Bild von der Filterung erheblich profitiert. Im Gegensatz, advdef Aus demselben Paket handelt es sich nicht um die PNG-Struktur und fungiert nur als Neubeschaffung und behält vorhandene Filtereinstellungen bei.

Symboloptimierung

Seit Ikonen Für Windows Vista und spätere Versionen können PNG -Subimages enthalten, die Optimierungen können auch auf sie angewendet werden. Mindestens ein Icon Editor, PixelFormer, ist in der Lage, einen speziellen Optimierungspass durchzuführen, während er sparen kann ICO Dateien, wodurch ihre Größen reduziert werden. FileOptimizer (oben erwähnt) kann auch ICO -Dateien verarbeiten.

Symbole für macOS Kann auch PNG -Subimages enthalten, es gibt jedoch kein solches Tool verfügbar.

Siehe auch

Anmerkungen

  1. ^ Die Filterung wird verwendet, um die Ähnlichkeit mit den Daten zu erhöhen und damit das Kompressionsverhältnis zu erhöhen. Es gibt jedoch theoretisch keine Formel für Ähnlichkeit, noch eine absolute Beziehung zwischen Ähnlichkeit und Kompressor, daher kann man nicht sagen, dass ein Filtersatz besser ist als ein anderer.
  2. ^ a b c d Verwenden Sie PNGOUT -F6, um den vorherigen Filtersatz wiederzuverwenden
  3. ^ Die Tools, die eine solche Funktion anbieten, könnten als reine Neubeschaffung für PNG-Dateien dienen.
  4. ^ ZlibDie Implementierung der Referenzdeflatung ist auch auf maximaler Ebene suboptimal. Sehen Zopfli, ZIP-Format in 7-Zip und pngout.
  5. ^ Advpng unterstützt nicht nur die Farbreduktion nicht, sondern fällt auch bei Bildern mit einem reduzierten Farbbereich fehl.
  6. ^ Advpng kann nur filter 0 weltweit anwenden, daher ist es weder ja oder nein, sondern n/a.
  7. ^ [pngcrush | pngout] -f oder zopflipng -filters
  8. ^ zopfliPng -filters = p
  9. ^ Das Einstellungsdialog zur Optimierung von PNGoutwin bietet dem Benutzer eine Auswahl der Filterstrategien.

Verweise

  1. ^ a b c "ISO/IEC 15948: 2004 - Informationstechnologie - Computergrafik und Bildverarbeitung - Tragbare Netzwerkgrafiken (PNG): Funktionsspezifikation". Internationale Standardisierungsorganisation. 3. März 2004. Abgerufen 19. Februar 2011.
  2. ^ a b Roelofs, Greg (29. Mai 2010). "Geschichte von PNG". libpng. Abgerufen 20. Oktober 2010.
  3. ^ W3C 2003, 1 Umfang.
  4. ^ "Definition des PNG -Substantivs aus dem Wörterbuch des Oxford Advanced Learners". Die Wörterbücher von Oxford -Lernenden. Abgerufen 21. Januar 2018.
  5. ^ Roelofs, Greg. "Web Review: PNG ist nicht GIF!". people.apache.org. Abgerufen 24. November 2021.
  6. ^ T. Boutell; et al. (März 1997). "PNG (tragbare Netzwerkgrafik) Spezifikation Version 1.0". RFC 2083. IESG. Sek. 3. doi:10.17487/rfc2083.
  7. ^ "Registrierung von neuem Medientyp Image/PNG". Iana. 27. Juli 1996.
  8. ^ Roelofs 1999, Kapitel 7. Verlauf des tragbaren Netzwerkgrafikformats.
  9. ^ a b c d W3C 2003, 11.2.2 Ihdr Bildheader
  10. ^ Roelofs, Greg (29. September 2011). "Tragbare Netzwerkgrafik (PNG) Spezifikation und Erweiterungen". libpng. Abgerufen 15. August 2021.
  11. ^ "PNG (tragbare Netzwerkgrafik) Spezifikation 1.0". W3c. 1. Oktober 1996. Sec. 8.4. PNG selbst ist ausschließlich ein Einzelbildformat. (...) In Zukunft kann ein auf PNG basierendes Mehrfachbildformat definiert werden. Ein solches Format wird als separates Dateiformat angesehen
  12. ^ Boutell, Thomas (1. Oktober 1996). "PNG (tragbare Netzwerkgrafik) Spezifikation 1.0". {{}}: Journal zitieren erfordert |journal= (Hilfe)
  13. ^ W3C 2003, 5.2 PNG Signatur.
  14. ^ W3C 2003, 5.3 Chunk -Layout.
  15. ^ a b Laphroaig, Manul (31. Oktober 2017). POC oder GTFO. ISBN 9781593278984. Jeder Chunk besteht aus vier Teilen: einer Länge, einem Stau-Typ, den Chunk-Daten und einem 32-Bit-CRC. Die Länge ist eine 32-Bit-nicht signierte Ganzzahl, die die Größe nur des Felds der Stücke Daten anzeigt
  16. ^ Laphroaig, Manul (31. Oktober 2017). - POC oder GTFO. ISBN 9781593278984. Der Chunk-Typ ist ein 32-Bit-Viercc-Code wie IHDR, IDAT oder Iend. {{}}: Prüfen |url= Wert (Hilfe)
  17. ^ W3C 2003, 11.2.4 Idat Bilddaten.
  18. ^ W3C 2003, 11.2.5 Iend Bildanhänger.
  19. ^ W3C 2003, 11.3.3.3 ICCP Eingebettetes ICC -Profil.
  20. ^ Thomas Kopp (17. April 2008). "PNG Digitale Signaturen: Erweiterungsspezifikation".
  21. ^ "Erweiterungen zur PNG 1.2 -Spezifikation, Version 1.5.0". ftp-osl.osuosl.org.
  22. ^ W3C 2003, 11.3.3.2 Gama Bild Gamma.
  23. ^ W3C 2003, 11.3.5.3 Phys Physikalische Pixelabmessungen.
  24. ^ W3C 2003, 11.3.3.4 sbit Signifikante Bits.
  25. ^ "PNG (tragbare Netzwerkgrafik) Spezifikation \ Version 1.0". W3.org. Abgerufen 30. Mai 2022. 4.2.6. SBIT Signifikant Bits, 13 Bytes Gesamt - Farbart 2 und 3 waren insgesamt 6 Bytes
  26. ^ Roelofs 2003, Signifikante Bits (SBIT)"Graustufenbilder sind die einfachsten; SBIT enthält dann ein einzelnes Byte, das die Anzahl der signifikanten Bits in den Quelldaten angibt"
  27. ^ "PNG -Spezifikation: Chunk -Spezifikationen".
  28. ^ "PNG News aus dem Jahr 2006". Libpng.org.
  29. ^ a b "PNG -Spezifikation: Begründung". W3.org.
  30. ^ W3C 2003, 9 Filterung.
  31. ^ "Filteralgorithmen". PNG -Spezifikation.
  32. ^ Paeth, Alan W. (1991). Arvo, James (Hrsg.). "Bilddateikomprimierung einfach". Grafik -Edelsteine ​​2. Academic Press, San Diego: 93–100. doi:10.1016/b978-0-08-050754-5.50029-3. ISBN 0-12-064480-0. closed access
  33. ^ Crocker, Lee Daniel (Juli 1995). "PNG: Das tragbare Netzwerkgrafikformat". Dr. Dobbs Journal. 20 (232): 36–44.
  34. ^ "Einführung in PNG". nuwen.net. Abgerufen 20. Oktober 2010.
  35. ^ a b "Kann ich ... Supporttabellen für HTML5, CSS3 usw. verwenden". caniuse.com. Abgerufen 6. Februar 2021.
  36. ^ "iOS 8 und iPhone 6 für Webentwickler und Designer: Nächste Evolution für Safari und native Webapps". mobilexweb.com. 17. September 2014. Abgerufen 24. September 2014.
  37. ^ Scroggo (14. März 2017). "Chrom / Chrom / SRC / 7D2B8C45AFC9C0230410011293CC2E1DBB8943A7". chromium.googlesource.com. Abgerufen 31. März 2017.
  38. ^ verchromt; et al. (27. März 2017). "Chrom / Chrom / SRC / 59.0.3047.0..59.0.3053.0". chromium.googlesource.com. Abgerufen 31. März 2017.
  39. ^ "Abstimmung fehlgeschlagen: APNG 20070405A". 20. April 2007. archiviert von das Original am 3. Februar 2008.
  40. ^ "PNG Group Animation Vorschlag Vergleich + Test-Software". xs4all.nl. Archiviert von das Original am 24. Januar 2009.
  41. ^ a b c Deutsch, L. Peter; Gailly, Jean-Loup (Mai 1996). "RFC1950". DataTracker.ietf.org. Abgerufen 18. August 2021.
  42. ^ Deutsch, L. Peter (Mai 1996). "RFC1951". DataTracker.ietf.org. Abgerufen 18. August 2021.
  43. ^ "Eine grundlegende Einführung in PNG -Funktionen". Libpng.org. Abgerufen 20. Oktober 2010.
  44. ^ "GIF, PNG, JPG. Welches zu verwenden?". Sitepoint.com. 3. August 2009. Abgerufen 20. Oktober 2010.
  45. ^ "Erweiterungen zur PNG 1.2 -Spezifikation, Version 1.5.0". Abgerufen 5. Mai 2020.
  46. ^ "T.87: verlustfreie und nahezu verlustfreie Kompression von Stillbildern mit kontinuierlichem Ton-Baseline". Internationale Telekommunikationsunion. Abgerufen 20. März 2011.
  47. ^ a b c d e f g Roelofs 2003, Kapitel 9. Komprimierung und Filterung
  48. ^ "libpng". Abgerufen 13. Juli 2013.
  49. ^ "Verwendung von PNG -Bildern zum Anzeigen von Daten". Oregon Water Science Center. 16. Februar 2006.
  50. ^ "Warum gibt es keine GIF -Dateien auf GNU -Webseiten". GNU -Betriebssystem. 16. Dezember 2008.
  51. ^ "PNG Fact Sheet". World Wide Web Konsortium. 7. Oktober 1996.
  52. ^ "Ressourcenseite für GIF2PNG 2.5.11". Catb.org.
  53. ^ "Brennen Sie alle GIFs". Burnallgifs.org.
  54. ^ "PNG -Transparenz im Internet Explorer". PC Magazine. 5. Oktober 2004.
  55. ^ a b c d e "Browser mit PNG -Unterstützung". 14. März 2009.
  56. ^ "Windows Explorer stürzt ab, wenn ich auf eine Fireworks -PNG -Datei klicke, um sie anzuzeigen, um sie anzuzeigen.". Adobe Systems. 5. Juni 2007.
  57. ^ "PNG -Bilder mit Internet Explorer 4.0 nicht anzeigen". Microsoft Knowledge Base.
  58. ^ "PNGs, die sich in einem Objekt -Tag als negatives Bild befinden.". Microsoft Knowledge Base.
  59. ^ "PNG -Bilder werden in Internet Explorer 5.01 nicht ordnungsgemäß gedruckt". Microsoft Knowledge Base.
  60. ^ "Sie können einige PNG -Bilder in Internet Explorer 6 nicht anzeigen". Microsoft Knowledge Base.
  61. ^ "Sie können Internet Explorer 6 nicht verwenden, um eine PNG-Datei zu öffnen, die eine oder mehrere IDAT-Stücke mit Nulllängen enthält.". Microsoft Knowledge Base.
  62. ^ "PNG stellte häufig Fragen".
  63. ^ "PhD: Tragbare Netzwerkgrafiken verlieren Transparenz im Webbrowser". Microsoft Knowledge Base.
  64. ^ "PNG -Dateien zeigen keine Transparenz im Internet Explorer". Microsoft Knowledge Base.
  65. ^ Lovitt, Michael (21. Dezember 2002). "Cross-Browser-variable Deckkraft mit PNG: Eine echte Lösung". Eine Liste auseinander. Archiviert von das Original am 18. August 2011. Abgerufen 21. Juli 2009.
  66. ^ "IE7 Alpha transparent PNG + Deckkraft". Kanal 9. Archiviert von das Original am 27. August 2011. Abgerufen 23. Januar 2009.
  67. ^ Fulbright, Michael (1999). "GNOME 1.0 Bibliothek Roadmap". Archiviert von das Original am 30. Januar 2010. Abgerufen 19. Dezember 2007.
  68. ^ "Windows Vista - Symbole". Oone. 2007. archiviert von das Original am 11. November 2007. Abgerufen 12. November 2007.
  69. ^ "PNG kann ein verlustvolles Format sein". Pngmini.com. Abgerufen 1. Februar 2014.

Weitere Lektüre

Externe Links