Шестнадцатеричный дамп PNG на самом деле не читается человеком. «од» подходит ближе:
od -c *.png
0000000 211 P N G \r \n 032 \n \0 \0 \0 \r I H D R
0000020 \0 \0 \0 \n \0 \0 \0 \n \b 006 \0 \0 \0 215 2 317
0000040 275 \0 \0 \0 004 g A M A \0 \0 257 310 7 005 212
0000060 351 \0 \0 \0 031 t E X t S o f t w a r
0000100 e \0 A d o b e I m a g e R e a
0000120 d y q 311 e < \0 \0 001 g I D A T x 332
0000140 , 220 ; H 034 Q 030 205 277 { g f ] | c 241
....
0000660 030 376 305 036 h 037 365 230 312 C 312 \t F 377 \v 0
0000700 \0 201 e 231 267 344 223 & 356 \0 \0 \0 \0 I E N
0000720 D 256 B ` 202
Первая строка — это 8-байтовая сигнатура PNG, 4-байтовое число 13 (длина фрагмента IHDR), «IHDR».
Вторая строка — это 13 байтов данных IHDR (ширина, высота, битовая глубина, тип цвета и т. д.), за которыми следует 4-байтовый CRC (циклический контроль избыточности).
Третья строка представляет собой фрагмент gAMA длиной 4 байта (4), "gAMA", 4-байтовым значением гаммы и 4-байтовым CRC.
Четвертая и пятая строки содержат фрагмент tEXt, идентифицирующий программное обеспечение, создавшее PNG, с длиной 4 байта, 4-байтовым именем фрагмента «tEXt», текстом, затем 4-байтовым CRC.
Следующая строка начинается с фрагмента IDAT, который содержит представление пикселей, сжатое с помощью zlib, опять же длиной 4 байта.
Последние две строки содержат CRC для фрагмента IDAT, за которым следует фрагмент IEND, отмечающий конец PNG: 0000 — длина данных, IEND — имя фрагмента, а 256 B `202 — четырехбайтный CRC для IEND. кусок.
Все это объясняется в спецификации формата PNG, которую вы можете прочитать по адресу http://www.w3.org/TR/PNG
Я поддерживаю рекомендацию Марка Сетчелла преобразовать файл в тривиальный формат PPM, а затем работать с ним; это то, что я обычно делаю, хотя я хорошо знаком с PNG и libpng.
Вот как выглядит ваше изображение в PPM:
convert *.png -compress none ppm:-
P3
10 10
255
221 117 45 229 122 51 234 129 56 237 134 57 240 139 59 242 144 60 244 148 61 246 152 62 242 147 59 225 125 48
229 122 51 233 135 73 244 190 152 243 170 114 241 139 53 244 145 54 247 150 56 249 154 57 250 157 58 241 145 58
[8 more long lines omitted]
Это просто "P3" (означает формат RGB, ASCII); 10 10 (ширина, высота); 255 (максимальное значение интенсивности для каждого канала); R G B R G B R G B.... пока не будут переданы все 100 пикселей RGB
Обратите внимание, что альфа-канал, если он присутствует, теряется при преобразовании в PPM. Вы можете конвертировать в формат PAM NETPBM http://en.m.wikipedia.org/wiki/Netpbm#PAM_graphics_format, который похож на PPM, но был расширен за счет включения альфа-канала (непрозрачности) (но, к сожалению, неудобочитаемым для человека) или формата TXT от ImageMagick; который поддерживает альфу, но довольно многословен:
convert *.png txt:-
# ImageMagick pixel enumeration: 10,10,255,srgba
0,0: (221,117,45,0.376471) #DD752D60 srgba(221,117,45,0.376471)
1,0: (229,122,51,1) #E57A33 srgba(229,122,51,1)
2,0: (234,129,56,1) #EA8138 srgba(234,129,56,1)
etc., through
7,9: (226,113,53,1) #E27135 srgba(226,113,53,1)
8,9: (223,109,49,1) #DF6D31 srgba(223,109,49,1)
9,9: (220,114,45,0.376471) #DC722D60 srgba(220,114,45,0.376471)
Другое полезное приложение — «pngcheck», которое выводит список фрагментов PNG и проверяет их CRC на наличие ошибок:
pngcheck -v *.png
File: feed-icon-10x10.png (469 bytes)
chunk IHDR at offset 0x0000c, length 13
10 x 10 image, 32-bit RGB+alpha, non-interlaced
chunk gAMA at offset 0x00025, length 4: 0.45000
chunk tEXt at offset 0x00035, length 25, keyword: Software
chunk IDAT at offset 0x0005a, length 359
zlib: deflated, 32K window, maximum compression
chunk IEND at offset 0x001cd, length 0
person
Glenn Randers-Pehrson
schedule
30.05.2015
NetPBM PPM- его НАМНОГО проще декодировать. Или используйте ImageMagick для преобразования PNG в PPM, используяconvert image.png image.ppm- person Mark Setchell   schedule 30.05.2015PPMP6 или P3... en.m.wikipedia.org /wiki/Netpbm_format#PPM_example Если вам нужен несжатый, удобочитаемый формат P3, используйте эту команду ImageMagickconvert input.png -compress none output.ppm. Если вам нужен формат P6, опустите-compress none- person Mark Setchell   schedule 31.05.2015