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
PNG-Signatur und IHDR
| Offset | Hex | ASCII | |||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0000 | 89504E470D0A1A0A0000000D49484452 | .PNG........IHDR | |||||||||||||||
| 0010 | 00000100000001000802000000000000 | ............. | |||||||||||||||
Aufbau eines Chunks
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.
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.
XML:com.adobe.xmp\0eXIf: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
Signatur prüfen
Auf die PNG-Signatur testen: 89 50 4E 47 0D 0A 1A 0A
Chunks auslesen
Länge und Typ jedes Chunks lesen und die CRC prüfen
Metadaten-Chunks herausfiltern
tEXt-, zTXt-, iTXt-, eXIf- und tIME-Chunks erkennen und überspringen
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)