I’m trying to understand how data are stored into IDAT chunk. I’m writing a little PHP class and I can retrieve most of chunks information but what I get for IDAT doesn’t match pixels of my image :
It is 2×2px truecolour with alpha (bitdepth 8).
But when I interpret IDAT data like this:
current(unpack('H*',gzuncompress($idat_data)));
I get
00000000ffffff00ffffff000000
I don’t understand how it can match pixels. Or is it my code which corrupts data?
Thanks for your help!
EDIT: I get
08d705c101010000008010ff4f1750a93029e405fb
as hex compressed data, so it seems I loss several bytes after uncompressing.

Use gzinflate but skip the first 2 bytes and the last 4 first.