PNG と GIF (あとJPEG) の分解

これらの画像フォーマットを一通り理解したので、 PHP で chunk 分解してみました。
図を作った方がいいかな。

PNG

  • dump実行例
~/git/IO_PNG% php sample/pngdump.php 4color.png 
Name:IHDR Size=13 CRC=4258568819
  Width:2 Height2 BitDepth:8 ColorType:2(RGB) Compression:0 Filter:0 Interlate:0
Name:sRGB Size=1 CRC=2932743401
Name:gAMA Size=4 CRC=201089285
Name:cHRM Size=32 CRC=2629456188
Name:IDAT Size=22 CRC=2986498017
             0  1  2  3  4  5  6  7   8  9  a  b  c  d  e  f  0123456789abcdef
0x00000000  18 57 63 f8 ff 89 e1 ad  8c 0a 83 6f ee 67 a5 8d   Wc        o g  
...
Name:IEND Size=0 CRC=2923585666
             0  1  2  3  4  5  6  7   8  9  a  b  c  d  e  f  0123456789abcdef
0x00000000  00 ff f2 00 ed 1c 24 00  4d 6d f3 22 b1 4c              $ Mm " L

GIF

  • dump実行例
~/git/IO_GIF% php sample/gifdump.php 4color.gif 
Signature:GIF Version:89a
Screen: Width:2 Height:2
GlobalColorTableFlag:1 ColorResolution:8 SortFlag:0 SizeOfGlobalColorTable: 4
#ed1c24 #22b14c #fff200 #4d6df3 
BlockLabel:0x21 ExtensionLabel:0xF9 (Graphic Control)
    DisposalMethod:0 UserInputFlag:0
    TransparentColorFlag:0 DelayTime:0 TransparentColorIndex:0
BlockLabel:0x2C (Image)
    Left:0 Top:0 Width:2 Height:2
    LocalColorTableFlag:0 InterlaceFlag:0 SortFlag:0 SizeOfLocalColorTable:0
    ImageData.count:1

JPEG

  • dump実行例
~/svn/IO_SWF% php sample/jpeg_dump.php dump orz.jpg 
SOI:
APP0: length=14 md5=6231819e4c55dc62557f1cda73329e99
DQT: length=65 md5=d0eaa368737f17f6037757d393a22599
DQT: length=65 md5=0ccab5367a4a1a6b9d4f5dc5b1b6da3f
SOF0: length=15 md5=c83e80b171b05e3d1daaecc9f7a9d4b2
DHT: length=26 md5=c30a44c47fc7a3bf3dc08b0d0c16cb24
DHT: length=54 md5=ad4a54e8cffc484a1d57d8b9619159e8
DHT: length=21 md5=f5142d552f32b0fd9b6f01287d6187cd
DHT: length=27 md5=5340e2d349d844450c870b9a37698f85
SOS: length=1945 md5=8003cab9c3564d49fb37d5f4a30d8a1e
EOI: