Tragbare Netzwerkgrafiken

PNG
Portable Network Graphic Bild in der Infobox. Ein PNG-Bild mit einem transparenten Hintergrund auf einem weißen Hintergrund Eigenschaften
Erweiterung .PNG
Mime Typ image/png
Unterschrift 89 50 4E 47 0D 0A 1A 0A( Hexa )
Entwickelt von W3C
Erste Version 1 st Oktober 1996
Formattyp Matrix Bildformat verlustfrei
Beyogen auf Entleeren
Standard ISO 15948 , W3C , IETF RFC 2083
ISO 15948
Spezifikation Offenes Format
Websites (de)  www.libpng.org/pub/png
(de)  png-mng.sourceforge.net/pub/png

Das Portable Network Graphics ( PNG ) ist ein Bildschirm geöffnet , um digitale Bilder , die das Format ersetzen erstellt wurde GIF , zu dem Zeitpunkt Eigentümer und deren Kompression war Gegenstand einer Patent . PNG ist ein verlustfreies Format, das speziell für die Veröffentlichung von Bildern einschließlich einfacher flacher Farben angepasst wurde.

Es wurde durch ISO standardisiert (ISO / IEC 15948: 2004).

PNG ist eine Spezifikation für das Internet und Gegenstand einer W3C-Empfehlung und eines RFC . Es wurde geschaffen, um die bestehende Lizenz für das GIF-Format zu umgehen, das Ende der neunziger Jahre am beliebtesten war. Unisys , Inhaber von zwei Patenten für Algorithmen, die durch Komprimierung unter GIF verwendet werden , hat Lizenzgebühren geltend gemacht. PNG wurde dann definiert, aber durch Erhöhen der Fähigkeiten von GIF.

benutzen

Für synthetische Bilder

PNG eignet sich besonders zum Speichern von für das Web bestimmten synthetischen Bildern wie Grafiken, Symbolen , Bildern, die Text darstellen (gute Lesbarkeit) oder Bildern mit Verläufen. PNG übertrifft GIF in Bezug auf die Reduzierung der Dateigröße (mit einem ausgewählten Farbschema) oder die Qualität (da es nicht auf 256 Farben beschränkt ist ) durchweg .

Für die Bilder

Die Eigenschaften von PNG ermöglichen das Speichern von Fotos ohne Datenverlust , was sich nachteilig auf die Dateigröße auswirkt, die logischerweise viel größer ist als die von Datenverlusten, die für Fotos wie JPEG oder JPEG 2000 vorgesehen sind .

Formatdetails

Mit PNG können Sie hauptsächlich Rasterbilder in verschiedenen Formaten speichern  :

Im Artikel Digital Image finden Sie eine Erläuterung dieser Konzepte.

Nach Anwendung eines Vorhersagefilters, mit dem im Allgemeinen höhere Komprimierungsstufen erzielt werden können , wird das Ganze nach dem Deflate- Algorithmus ( RFC 1951 ) ohne Verluste komprimiert , normalerweise mit zlib . Zopfli kann jedoch auch mit Apps wie advpng verwendet werden.

Pixelkomponenten oder Paletteneinträge sind entweder im gegebenen RGB - Format (Rot, Grün, Blau) oder im RGBA - Format (mit einem zusätzlichen Kanal für die alpha Transluzenz). In diesem Fall werden zusätzliche 8 oder 16 Bit pro Pixel oder pro Paletteneintrag verwendet, wodurch 16 Bit für ein Graustufenbild, 32 Bit für ein Echtfarbenbild und 64 Bit für ein 4-Kanal-Bild mit jeweils 16 Bit erstellt werden.

Transluzenz

Das Vorhandensein eines Alphakanals , der verschiedene Transparenzstufen definiert, macht ihn ideal für die Komposition auf Webseiten. Diese Funktion wird von den meisten Webbrowsern gut implementiert .

Transparenz

Wenn das PNG-Bild eine Palette von bis zu 256 Farben verwendet, kann eine der Farben für die Transparenz verwendet werden.

Dies ist das gleiche Verhalten wie beim GIF- Format und funktioniert sogar mit Internet Explorer 6 . Daher Web - Bilder in GIF - Format können mit der Mehrheit des , ohne Angst vor Inkompatibilität zu dieser Version von PNG konvertiert werden aktuellen Web - Browser (erstes Quartal 2006) und ohne Patent betrifft (das GIF - Patent in fiel 2006 in der Public Domain ).

Andere Vergleiche mit GIF

PNG, das im Übrigen manchmal rekursiv als Nicht-GIF von PNG bezeichnet wird ( PNG ist kein GIF ), kann alles, was GIF kann, und mehr, wie z. B. die Transluzenz . Es war jedoch nicht beabsichtigt, bewegte Bilder zu erstellen, sondern das abgeleitete MNG- Format wurde von seinen Autoren zu diesem Zweck erstellt (siehe auch das APNG- Format ).

Beide Formate können interlaced werden , aber PNG verwendet den Adam7- Algorithmus, während GIF in diesem Fall das Bild zeilenweise anzeigt.

Struktur einer PNG-Datei

Minimale Zusammensetzung einer PNG-Datei

  1. PNG-Signatur - 8 Bytes
  2. Block IHDRfür Header - 25 Bytes
  3. Chunk IDATfür Daten - variable Länge
  4. Block IENDfür Dateiende - 12 Bytes

Ein "  Block  " ist ein großer Teil der Datei, ein Informationsfragment, das eine Entität bildet. Dieser englische Begriff wird in vielen Multimedia-Formaten verwendet.

Eine Datei kann mehrere Datenblöcke IDATsowie einen Block enthalten, PLTEden die Palette verwenden kann, wenn es sich um ein Bild handelt, dessen Farben indiziert sind.

Eine Datei kann auch andere sekundäre Blöcke enthalten, einschließlich Textinformationen.

Unterschrift PNG

Eine PNG-Datei beginnt mit einer Signatur von 8 Bytes, die durch die folgenden Dezimalwerte 137 80 78 71 13 10 26 10oder Hexadezimalzahlen dargestellt wird : 89 50 4E 47 0D 0A 1A 0A.

Der Rest der Datei ist in mehrere Teile unterschiedlicher Länge unterteilt, die als Chunk bezeichnet werden.

Brocken benennen

Es gibt 18 offizielle Brocken , darunter 4 primäre und 14 sekundäre.

Die Brocken sind beschriftet (ernannt). Die Pause ist wichtig für die Namen von Brocken . Jedes Label wird durch vier aufeinanderfolgende Zeichen definiert, die einen mnemonischen Code in Form von fourCC definieren . Wenn für jeden Block der erste Buchstabe seines Namens groß geschrieben wird, handelt es sich um einen kritischen Block , andernfalls handelt es sich um einen Hilfsblock .

Hier ist eine Tabelle der am häufigsten verwendeten Brocken (die vier wichtigsten in der Führung):

Nachname Beschreibung Enthält Bedeutung Auftreten
IHDR Bild - Header
- Datei - Header

Bildbreite in Pixel
Bildhöhe in Pixel
Bittiefe (1, 2, 4, 8 oder 16)
Farbtyp (0, 2, 3, 4 oder 6)
Komprimierungsmethode (0)
Methodenfilterung (0)
Interleaving-Methode: 0 (ohne) oder 1 (mit Adam7)

Obligatorisch Nach der Unterzeichnung von PNG
PLTE Bildpalette
Palette
Farbtabelle Optional Zwischen IHDRund die 1 st BrockenIDAT
IDAT Bilddaten
Datenblock
Bilddaten Obligatorisch Zwischen IHDRoder PLTEundIEND
IEND Bild-Trailer
Dateiende
nichts Obligatorisch zuletzt
tIME Zeit für die letzte Änderung des Bildes
Zeitstempel

Optional Irgendwo
iTXt Internationale Textdaten
Internationale Text Info
(vielleicht komprimiert zlib)

Optional Irgendwo
tEXt Textuelle Daten
unkomprimiert Textinfo

Optional Irgendwo
zTXt Komprimierte Textdaten Komprimierte
Textinformationen (zlib)

Optional Irgendwo

Die anderen zehn sekundären Stücke sind:

bKGD Hintergrundfarbe pHYs Physikalische Pixelabmessungen
cHRM Primärchromatizitäten und Weißpunkt sBIT Bedeutende Bits
gAMA Gammabild sPLT Vorgeschlagene Palette
hIST Bildhistogramm sRGB Standard-RGB-Farbraum
iCCP Eingebettetes ICC-Profil tRNS Transparenz


Es können auch andere Blöcke definiert werden. Sie sind entweder öffentlich oder privat, müssen jedoch die Namensregeln erfüllen. Ein öffentlicher Teil muss bei W3C registriert sein , der von ISO / IEC benannten Behörde .

Hier sind die verwendeten öffentlichen Blöcke :

dSIG Digitale Unterschrift oFFs Versetztes Bild
eXIf Exif-Profil (Exchangeable Image Format) pCAL Kalibrierung von Pixelwerten
fRAc Fraktale Bildparameter sCAL Physikalische Skala des Bildmotivs
gIFg GIF Graphic Control Extension sTER Anzeige des Stereobildes
gIFx GIF-Anwendungserweiterung

Zusammensetzung eines Stückes

Ein Stück besteht aus 4 Teilen:

LÄNGE ART DATAS CRC
Datenlänge Art des Stücks Daten, deren Länge in Bytes in LENGTH angegeben ist Steuerung
4 Bytes 4 Bytes n Bytes 4 Bytes

LÄNGE: Die Größe des Blocks in Bytes, nur seine Daten. Wir berücksichtigen nicht die Größe, den Typ oder die CRC.

TYPE: Der Name des Chunks (zB IHDR, IDAT, IENDetc.).

DATAS: Informationen zum Block über n Bytes (zur LÄNGE).

CRC: 4 Prüfbytes, die mit dem folgenden Algorithmus generiert wurden:

fonction maj_crc((entier positif 4 octets) crc, (entier positif 1 octet) bloc(), (entier positif 4 octets) taille) //le premier argument, crc, lors du premier appel de cette fonction pour un chunk donné, doit être 0xffffffff (tous les bits à 1) //sinon, il doit s'agir de la valeur retournée par le précédent appel de cette fonction //le deuxième argument, bloc(), est une liste d'éléments d'un octet. Il s'agit de tout ou partie du chunk //le troisième argument, taille, est le nombre d'éléments de la liste bloc() (entier positif 4 octets) c, n, v c=crc pour n de 0 à (taille-1) //normalement, cette boucle ne contient qu'une seule instruction mais, ici, elle est subdivisée en quatre instructions. C'est plus lisible ainsi //il y a une itération de cette boucle pour chacun des octets de la partie DATA du chunk, dans l'ordre de leurs positions dans le chunk //xb=ou exclusif bit à bit v=c xb bloc(n) //eb=et bit à bit; tout nombre préfixé par 0x est en base 16 //on met à 0 les bits des trois premiers octets, vu que leur valeur ne dépend pas de celle de bloc(n) v=v eb 0xff //table_crc() est une liste de 256 constantes, des entiers codés sur quatre octets (voir ci-dessous) v=table_crc(v) //div=division entière c=v xb (c div 256) fin pour retourner c fin fonction

Sobald der gesamte Block gescannt wurde, ist der Wert, der beim letzten Aufruf von maj_crc () zurückgegeben wurde, nicht der des crc. Es ist weiterhin erforderlich, den Wert jedes Bits zu invertieren:

fonction validation_crc((entier positif 4 octets) crc) retourner (crc xb 0xffffffff) fin fonction

Die Liste table_crc () in maj_crc () besteht aus beliebigen, aber berechenbaren Werten. Einige Implementierungen listen diese Werte auf (dann im Voraus berechnet) und speichern sie direkt in der Variablen, während andere den Algorithmus (normalerweise eine Funktion) enthalten, um sie zu berechnen:

fonction calcul_table_crc() (entier positif 4 octets) c, i, j pour i de 0 à 255 c=i //8 itérations pour j de 0 à 7 //retourne 0 (faux) si c est pair et 1 (vrai) si c est impair (en dehors du dernier,tous les bits du résultat sont à 0) si (c eb 1) //la valeur 0xedb88320 (11101101 10111000 10001100 00100000 en binaire et 3 988 292 384 en décimal) est arbitraire //c étant, dans ce cas, nécessairement impair, c div 2 équivaut à (c-1)/2 c=0xedb88320 xb (c div 2) sinon c=c/2 fin si fin pour table_crc(i)=c fin pour fin fonction

Beispiel eines IHDR-Blocks für ein 800x600-Bild

Das Chunk-Beispiel IHDRbesteht aus den folgenden Binärdaten, die hier hexadezimal dargestellt werden:

00 00 00 0D 49 48 44 52 00 00 03
20 00 00 02 58 10 06 00 00 00 15
14 15 27

Diese Daten sind gemäß der Tabelle zu interpretieren.

Daten
(hexadezimal)
Beschreibung Wert
(in Dezimalzahl)
00 00 00 0D Datenlänge 13
49 48 44 52 Chunk-Typ / Name IHDR
00 00 03 20 Breite 800
00 00 02 58 Höhe 600
10 Bittiefe 16
06 Farbtyp 6
00 Kompressionsverfahren 0
00 Filtermethode 0
00 Interlacing-Methode 0
15 14 15 27 CRC 353637671

Datenkompression

Die 0in IHDR(die im PNG-Format nur mögliche) angegebene Komprimierungsmethode bezieht sich auf die Deflate / Inflate-Komprimierung . Die Komprimierung erfolgt nur für Blockdaten IDAT.

In der Programmierung

Die Komprimierung kann mithilfe der zlib- Bibliothek (C / C ++) erfolgen. Es ist auch möglich, die CRC mit dieser Bibliothek zu generieren.

Siehe auch

Zum Thema passende Artikel

Andere Formate:

Externe Links

Anmerkungen und Referenzen

  1. (in) ISO / IEC, Spezifikation für tragbare Netzwerkgrafiken (PNG) (zweite Ausgabe)  " auf w3.org , 10. November 2003.
  2. (de) ISO / IEC, Spezifikation für tragbare Netzwerkgrafiken (PNG) (zweite Ausgabe) - §5.4 - Chunk-Namenskonventionen  " , auf w3.org , 10. November 2003.
  3. (in) ISO / IEC, PNG-Spezifikation (Portable Network Graphics) (zweite Ausgabe) - § 4.9 - Erweiterung und Registrierung  " auf w3.org , 10. November 2003.
  4. (en) Betreuer der PNG-Spezifikation Erweiterungen der PNG 1.2-Spezifikation, Version 1.5.0  " , 15. Juli 2017.