PicScrub logoPicScrub
Zurück zu den Formaten

PNG-Format

Portable Network Graphics

Aufbau aus Chunks

PNG hat eines der saubersten Dateiformate überhaupt. Alles ist in „Chunks“ organisiert, also in eigenständige Blöcke mit Typ, Daten und Prüfsumme. Das Elegante daran: Decoder können Chunks überspringen, die sie nicht kennen. Genau so unterstützt PNG Metadaten, ohne ältere Software zu beschädigen.

Clever ist auch die Benennung der Chunks: Ist der erste Buchstabe groß, ist der Chunk „kritisch“ (ohne ihn lässt sich das Bild nicht darstellen). Ein Kleinbuchstabe steht für „ergänzend“, also nett zu haben, aber nicht notwendig. Alle Metadaten-Chunks, um die es uns geht, sind ergänzend. Deshalb können wir sie gefahrlos entfernen.

Struktur einer PNG-Datei

Signature
IHDR
Metadata
IDAT
IEND
Signature
8 Bytes
89 50 4E 47 0D 0A 1A 0A
IHDR
25 Bytes
Bild-Header (erforderlich)
Metadata
100 Bytes
tEXt-, iTXt-, eXIf-Chunks
IDAT
Variable Länge
Komprimierte Bilddaten
IEND
12 Bytes
Markierung für das Bildende

PNG-Signatur und IHDR

PNG-Signatur
IHDR-Länge (13)
IHDR-Typ
Breite (256)
Höhe (256)
Bittiefe, Farbtyp usw.
OffsetHexASCII
0000
89504E470D0A1A0A0000000D49484452
.PNG........IHDR
0010
00000100000001000802000000000000
.............

Aufbau eines Chunks

LängeTypDatenCRC32
4 Bytes4 BytesVariabel4 Bytes

Namenskonvention für Chunk-Typen

  • • Erster Buchstabe groß = kritischer Chunk (muss verstanden werden)
  • • Erster Buchstabe klein = ergänzender Chunk (optional, darf ignoriert werden)
  • • Zweiter Buchstabe = öffentlich (groß) oder privat (klein)

Kritische Chunks

Diese Chunks müssen vorhanden und verstanden werden, damit das Bild gültig ist. PicScrub behält kritische Chunks immer bei.

IHDR:Bild-Header

Erster Chunk nach der Signatur. Enthält Breite, Höhe, Bittiefe, Farbtyp, Kompressionsverfahren, Filterverfahren und Interlacing-Verfahren. Genau 13 Bytes Daten.

IDAT:Bilddaten

Enthält die komprimierten Bilddaten (zlib/Deflate). Kann auf mehrere IDAT-Chunks aufgeteilt sein. Alle IDAT-Chunks müssen aufeinanderfolgen.

IEND:Bildende

Markiert das Ende des PNG-Datenstroms. Muss der letzte Chunk sein. Enthält keine Datenbytes.

PLTE:Palette

Erforderlich bei indizierten Farbbildern (Farbtyp 3). Enthält 1–256 RGB-Paletteneinträge.

Metadaten-Chunks

Ergänzende Chunks, die datenschutzrelevante Metadaten enthalten können. Genau diese Chunks entfernt PicScrub.

tEXt:Unkomprimierter Text

Schlüssel-Wert-Paare in Latin-1-Kodierung. Häufige Schlüssel: Author, Description, Copyright, Creation Time, Software.

Aufbau: Schlüsselwort + Null-Byte + Text

zTXt:Komprimierter Text

Wie tEXt, aber mit zlib-Kompression. Wird für längere Texte verwendet.

iTXt:Internationaler Text

UTF-8-Text mit optionaler Kompression. Unterstützt Sprach-Tags und übersetzte Schlüsselwörter. Wird für XMP-Metadaten genutzt.

XMP-Schlüsselwort: XML:com.adobe.xmp\0

eXIf:EXIF-Daten

2017 als PNG-Erweiterung registriert. Enthält rohe EXIF-Daten im TIFF-Format, also dieselbe Struktur wie EXIF in JPEG. Kann GPS, Zeitstempel und Geräteinfos enthalten.

iCCP:ICC-Farbprofil

Eingebettetes ICC-Farbprofil, mit zlib komprimiert. PicScrub behält es standardmäßig bei, damit die Farben stimmen.

tIME:Zeitpunkt der letzten Änderung

Sieben Bytes: Jahr (2), Monat, Tag, Stunde, Minute, Sekunde. Verrät, wann das Bild zuletzt geändert wurde.

Chunks rund um die Farbe

Diese Chunks beeinflussen die Farbdarstellung, enthalten aber in der Regel keine personenbezogenen Informationen. PicScrub behält sie standardmäßig bei.

sRGB

Gibt den sRGB-Farbraum an. Ein einzelnes Byte für den Rendering Intent.

gAMA

Gammawert als vorzeichenlose 4-Byte-Ganzzahl (mit 100.000 skaliert).

cHRM

Farbörter der Primärfarben und Koordinaten des Weißpunkts.

sBIT

Ursprüngliche Bittiefen der einzelnen Kanäle.

CRC32-Prüfung

Jeder PNG-Chunk enthält eine CRC32-Prüfsumme über Chunk-Typ und Chunk-Daten. Sie stellt die Datenintegrität sicher.

CRC-Berechnung

CRC32-Eingabe = chunk_type (4 Bytes) + chunk_data (N Bytes)
CRC32-Ausgabe = 4 Bytes, angehängt nach den Chunk-Daten

// PNG nutzt das CRC-32-Polynom: 0xEDB88320

Warum PicScrub die CRC prüft

Beim Lesen von PNG-Dateien prüft PicScrub die CRC jedes Chunks, um die Datenintegrität sicherzustellen. Beschädigte Chunks werden sauber abgefangen.

So verarbeitet PicScrub PNG

1

Signatur prüfen

Auf die PNG-Signatur testen: 89 50 4E 47 0D 0A 1A 0A

2

Chunks auslesen

Länge und Typ jedes Chunks lesen und die CRC prüfen

3

Metadaten-Chunks herausfiltern

tEXt-, zTXt-, iTXt-, eXIf- und tIME-Chunks erkennen und überspringen

4

Datei neu zusammensetzen

Signatur + gefilterte Chunks + IEND schreiben

Erhaltene Chunks

  • • IHDR, PLTE, IDAT, IEND (kritisch)
  • • sRGB, gAMA, cHRM (Farbe)
  • • iCCP (Farbprofil, optional)
  • • pHYs (Pixelabmessungen)
  • • tRNS (Transparenz)

Entfernte Chunks

  • • tEXt (Text-Metadaten)
  • • zTXt (komprimierter Text)
  • • iTXt (internationaler Text, XMP)
  • • eXIf (EXIF-Daten)
  • • tIME (Änderungszeitpunkt)