PNGファイルフォーマットの中身を参照

# 概要

pngファイルのフォーマットを確認するために、pngファイルのファイルをvimで開いて16進数で参照してみた。

# 手順

```
vim -b filename.png
```

vimでファイルを開くとなんのこっちゃかわからない
なのでこれを16進数で表現できるようにする


```
:%!xxd
```

すると以下のような表記になる。

```
  1 00000000: 8950 4e47 0d0a 1a0a 0000 000d 4948 4452  .PNG........IHDR
  2 00000010: 0000 0400 0000 0400 0103 0000 0045 d3b9  .............E..
  3 00000020: c000 0000 0467 414d 4100 00b1 8f0b fc61  .....gAMA......a
  4 00000030: 0500 0000 2063 4852 4d00 007a 2600 0080  .... cHRM..z&...
  5 00000040: 8400 00fa 0000 0080 e800 0075 3000 00ea  ...........u0...
  6 00000050: 6000 003a 9800 0017 709c ba51 3c00 0000  `..:....p..Q<...
  7 00000060: 0650 4c54 4580 0080 ffff ff56 303d 3e00  .PLTE......V0=>.
  8 00000070: 0000 0162 4b47 4401 ff02 2dde 0000 0007  ...bKGD...-.....
  9 00000080: 7449 4d45 07e2 0113 073b 361e d3ad cc00  tIME.....;6.....
 10 00000090: 0000 9649 4441 5478 daed c101 0100 0000  ...IDATx........
 11 000000a0: 8220 ffaf 6e48 4001 0000 0000 0000 0000  . ..nH@.........
 12 000000b0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
 13 000000c0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
 14 000000d0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
 15 000000e0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
 16 000000f0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
 17 00000100: 0000 0000 0000 0000 0000 0000 0000 0000  ................
 18 00000110: 0000 0000 0000 0000 0000 0000 0000 0000  ................
 19 00000120: 0000 0000 0000 00ef 0604 1e00 010d de38  ...............8
 20 00000130: 6400 0000 2574 4558 7464 6174 653a 6372  d...%tEXtdate:cr
 21 00000140: 6561 7465 0032 3031 382d 3031 2d31 3854  eate.2018-01-18T
 22 00000150: 3232 3a35 393a 3534 2b30 393a 3030 2dba  22:59:54+09:00-.
 23 00000160: 3e08 0000 0025 7445 5874 6461 7465 3a6d  >....%tEXtdate:m
 24 00000170: 6f64 6966 7900 3230 3138 2d30 312d 3138  odify.2018-01-18
 25 00000180: 5432 323a 3539 3a35 342b 3039 3a30 305c  T22:59:54+09:00\
 26 00000190: e786 b400 0000 0049 454e 44ae 4260 82    .......IEND.B`.
```

ちなみに2進数で開くときはオプションbをつけてあげる

```
:%!xxd -b
```

```
1 00000000: 00110000 00110000 00110000 00110000 00110000 00110000  000000
  2 00000006: 00110000 00110000 00111010 00100000 00111000 00111001  00: 89
  3 0000000c: 00110101 00110000 00100000 00110100 01100101 00110100  50 4e4
  4 00000012: 00110111 00100000 00110000 01100100 00110000 01100001  7 0d0a
  5 00000018: 00100000 00110001 01100001 00110000 01100001 00100000   1a0a
  6 0000001e: 00110000 00110000 00110000 00110000 00100000 00110000  0000 0
  7 00000024: 00110000 00110000 01100100 00100000 00110100 00111001  00d 49
  8 0000002a: 00110100 00111000 00100000 00110100 00110100 00110101  48 445
  9 00000030: 00110010 00100000 00100000 00101110 01010000 01001110  2  .PN
 10 00000036: 01000111 00101110 00101110 00101110 00101110 00101110  G.....
 11 0000003c: 00101110 00101110 00101110 01001001 01001000 01000100  ...IHD
 12 00000042: 01010010 00001010 00110000 00110000 00110000 00110000  R.0000
 13 00000048: 00110000 00110000 00110001 00110000 00111010 00100000  0010:
 14 0000004e: 00110000 00110000 00110000 00110000 00100000 00110000  0000 0
 15 00000054: 00110100 00110000 00110000 00100000 00110000 00110000  400 00
 16 0000005a: 00110000 00110000 00100000 00110000 00110100 00110000  00 040
 17 00000060: 00110000 00100000 00110000 00110001 00110000 00110011  0 0103
 18 00000066: 00100000 00110000 00110000 00110000 00110000 00100000   0000
 19 0000006c: 00110000 00110000 00110100 00110101 00100000 01100100  0045 d
 20 00000072: 00110011 01100010 00111001 00100000 00100000 00101110  3b9  .
 21 00000078: 00101110 00101110 00101110 00101110 00101110 00101110  ......
 22 0000007e: 00101110 00101110 00101110 00101110 00101110 00101110  ......
 23 00000084: 01000101 00101110 00101110 00001010 00110000 00110000  E...00
 24 0000008a: 00110000 00110000 00110000 00110000 00110010 00110000  000020
 25 00000090: 00111010 00100000 01100011 00110000 00110000 00110000  : c000
 26 00000096: 00100000 00110000 00110000 00110000 00110000 00100000   0000
 27 0000009c: 00110000 00110100 00110110 00110111 00100000 00110100  0467 4
 28 000000a2: 00110001 00110100 01100100 00100000 00110100 00110001  14d 41
 29 000000a8: 00110000 00110000 00100000 00110000 00110000 01100010  00 00b
 30 000000ae: 00110001 00100000 00111000 01100110 00110000 01100010  1 8f0b
 31 000000b4: 00100000 01100110 01100011 00110110 00110001 00100000   fc61
 32 000000ba: 00100000 00101110 00101110 00101110 00101110 00101110   .....
 33 000000c0: 01100111 01000001 01001101 01000001 00101110 00101110  gAMA..
 34 000000c6: 00101110 00101110 00101110 00101110 01100001 00001010  ....a.
 35 000000cc: 00110000 00110000 00110000 00110000 00110000 00110000  000000
 36 000000d2: 00110011 00110000 00111010 00100000 00110000 00110101  30: 05
 37 000000d8: 00110000 00110000 00100000 00110000 00110000 00110000  00 000
 38 000000de: 00110000 00100000 00110010 00110000 00110110 00110011  0 2063
 39 000000e4: 00100000 00110100 00111000 00110101 00110010 00100000   4852
 40 000000ea: 00110100 01100100 00110000 00110000 00100000 00110000  4d00 0
 41 000000f0: 00110000 00110111 01100001 00100000 00110010 00110110  07a 26
 42 000000f6: 00110000 00110000 00100000 00110000 00110000 00111000  00 008
 43 000000fc: 00110000 00100000 00100000 00101110 00101110 00101110  0  ...
 44 00000102: 00101110 00100000 01100011 01001000 01010010 01001101  . cHRM
 45 00000108: 00101110 00101110 01111010 00100110 00101110 00101110  ..z&..
 46 0000010e: 00101110 00001010 00110000 00110000 00110000 00110000  ..0000
 47 00000114: 00110000 00110000 00110100 00110000 00111010 00100000  0040:
 48 0000011a: 00111000 00110100 00110000 00110000 00100000 00110000  8400 0
 49 00000120: 00110000 01100110 01100001 00100000 00110000 00110000  0fa 00
 50 00000126: 00110000 00110000 00100000 00110000 00110000 00111000  00 008
 51 0000012c: 00110000 00100000 01100101 00111000 00110000 00110000  0 e800
 52 00000132: 00100000 00110000 00110000 00110111 00110101 00100000   0075
 53 00000138: 00110011 00110000 00110000 00110000 00100000 00110000  3000 0
 54 0000013e: 00110000 01100101 01100001 00100000 00100000 00101110  0ea  .
 55 00000144: 00101110 00101110 00101110 00101110 00101110 00101110  ......
 56 0000014a: 00101110 00101110 00101110 00101110 01110101 00110000  ....u0
 57 00000150: 00101110 00101110 00101110 00001010 00110000 00110000  ....00
 58 00000156: 00110000 00110000 00110000 00110000 00110101 00110000  000050
 59 0000015c: 00111010 00100000 00110110 00110000 00110000 00110000  : 6000
 60 00000162: 00100000 00110000 00110000 00110011 01100001 00100000   003a
 61 00000168: 00111001 00111000 00110000 00110000 00100000 00110000  9800 0
 62 0000016e: 00110000 00110001 00110111 00100000 00110111 00110000  017 70
 63 00000174: 00111001 01100011 00100000 01100010 01100001 00110101  9c ba5
....
```

# ファイルフォーマットの内容はこちらを参照

https://www.setsuki.com/hsp/ext/png.htm