Wie verwenden Sie PNG IDAT-chunk?
Ich versuche zu verstehen, wie Daten in IDAT-chunk. Ich Schreibe ein kleines PHP-Klasse und kann ich abrufen die meisten Stücke von Informationen, aber was bekomme ich für IDAT-nicht mit Pixel mein Bild zu :
Es ist 2×2px truecolour mit alpha (bitdepth 8).
Aber wenn ich interpretieren IDAT-Daten wie diese:
current(unpack('H*',gzuncompress($idat_data)));
Bekomme ich
00000000ffffff00ffffff000000
Ich nicht verstehe, wie kann es passen Pixeln. Oder liegt es an meinem code, die Daten korrumpiert?
Vielen Dank für Ihre Hilfe!
EDIT: ich bekomme
08d705c101010000008010ff4f1750a93029e405fb
als hex-Daten komprimiert, so dass es scheint, dass ich den Verlust mehrere bytes nach dem Dekomprimieren.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Verwenden, gzinflate, aber überspringen Sie die ersten 2 bytes und die letzten 4 die ersten.
Das ist, was ich sagen kann (was richtig ist) ... aber Ihnen fehlen die 2 Byte am Ende.
00
hier (die PNG-line-filter). Danach erhalten Sie zwei RGB-Tripel:00 00 00
undff ff ff
für die erste Zeile,ff ff ff
und00 00 00
für die 2nd.Hinzufügen @Andreas (+1) - parsing, zwei Dinge zu beachten:
Einer PNG-Datei kann (und muss oft) viele IDAT-chunks, müssen diese verkettet werden, die zum wiederherstellen der komprimierten zlib-stream. http://www.w3.org/TR/PNG/#10CompressionFSL
Gzip/Compress/Entlüften sind alle verwandt, aber nicht genau das gleiche. PNG verwendet deflate/inflate. Ich würde versuchen, mit gzdeflate/gzinflate
gzinflate(substr($idat_data, 2)
? php.net/manual/en/function.gzinflate.php#70875