Попытка понять формат PNG.Пытается извлечь значения пикселей из заданного изображения PNG
Рассмотрим PNG Image:
Изображение взято из here
В Hex Editor, это выглядит следующим образом:
89 50 4E 47 0D 0A 1A 0A 00 00 00 0D 49 48 44 52 00 00 00 80 00 00 00 44 08 02 00 00 00
C6 25 AA 3E 00 00 00 C2 49 44 41 54 78 5E ED D4 81 06 C3 30 14 40 D1 B7 34 DD FF FF 6F
B3 74 56 EA 89 12 6C 28 73 E2 AA 34 49 03 87 D6 FE D8 7B 89 BB 52 8D 3B 87 FE 01 00 80
00 00 10 00 00 02 00 40 00 00 08 00 00 01 00 20 00 00 04 00 80 00 00 10 00 00 02 00 40
00 00 08 00 00 01 00 20 00 00 00 D4 5E 6A 64 4B 94 F5 98 7C D1 F4 92 5C 5C 3E CF 9C 3F
73 71 58 5F AF 8B 79 5B EE 96 B6 47 EB F1 EA D1 CE B6 E3 75 3B E6 B9 95 8D C7 CE 03 39
C9 AF C6 33 93 7B 66 37 CF AB BF F9 C9 2F 08 80 00 00 10 00 00 02 00 40 00 00 08 00 00
01 00 20 00 00 04 00 80 00 00 10 00 00 02 00 40 00 00 08 00 00 01 00 20 00 00 8C 37 DB
68 03 20 FB ED 96 65 00 00 00 00 49 45 4E 44 AE 42 60 82
Эквивалентные символы:
‰PNG........IHDR...€...D.....Æ%ª>...ÂIDATx^íÔ..Ã[email protected]Ñ·4Ýÿÿo³tVê‰.l(sâª4I.‡ÖþØ{‰
»R.;‡þ..€[email protected] ....€[email protected] ...Ô^jdK”õ˜|Ñô’\\>Ïœ?sqX_¯
‹y[î–¶GëñêÑζãu;湕.ÇÎ.9ɯÆ3“{f7Ï«¿ùÉ/.€[email protected] ....€[email protected] ..Œ7Ûh.
ûí–e....IEND®B`‚
То же самое показано на следующем снимке экрана HEX редактор:
Я пытаюсь перепроектировать это изображение, чтобы извлечь часть заголовка и значения пикселей RGB. Я читал о PNG, а также here, и до сих пор я заметил следующее об этом изображении:
Кусок IHDR должен появиться ПЕРВЫЙ. Он содержит:
Width: 4 bytes
Height: 4 bytes
Bit depth: 1 byte
Color type: 1 byte
Compression method: 1 byte
Filter method: 1 byte
Interlace method: 1 byte
Ниже я начинаю чтение HEX данных в последовательности:
1- Первый 8-байт: Это 8-байтовое подпись
89 50 4E 47 0D 0A 1A 0A
Эквивалентно это:% PNG, как видно из редактора HEX
Допустимое изображение PNG должно содержать IHDR кусок, один или несколько фрагментов IDAT и кусок IEND.
2- Чанк: Длина
00 00 00 0D
3-Чанк: Кусок Тип
49 48 44 52
Который IHDR.
http://www.w3.org/TR/PNG-Chunks.html
4- Чанк: Ширина изображения (в десятичной системе 128)
00 00 00 80
5- Чанк: Высота изображения (в десятичном 68)
00 00 00 44
6- Chunk: BIT DEPTH (1 байт)
08
7- Чанк: Тип Цвет
02
8- Метод сжатия
00
9- Метод фильтра:
Метод10- чересстрочная:
00
11- Что такое следующие данные?
C6-25 АА 3E 00 00 00 С2
12-- IDAT
13- Что эти данные (после IDAT):
78 5E ED D4 81 06 C3 30 14 40 D1 B7 34 DD FF FF 6F B3 74 56 EA 89 12 6C 28 73 E2 AA 34 49 03 87 D6 FE D8 7B 89 BB 52 8D 3B 87 FE 01 00 80 00 00 10 00 00 02 00 40 00 00 08 00 00 01 00 20 00 00 04 00 80 00 00 10 00 00 02 00 40 00 00 08 00 00 01 00 20 00 00 00 D4 5E 6A 64 4B 94 F5 98 7C D1 F4 92 5C 5C 3E CF 9C 3F 73 71 58 5F AF 8B 79 5B EE 96 B6 47 EB F1 EA D1 CE B6 E3 75 3B E6 B9 95 8D C7 CE 03 39 C9 AF C6 33 93 7B 66 37 CF AB BF F9 C9 2F 08 80 00 00 10 00 00 02 00 40 00 00 08 00 00 01 00 20 00 00 04 00 80 00 00 10 00 02 00 00 40 00 00 08 00 00 01 00 20 00 00 37 8C DB 68 03 20 FB ED 96 65 00 00 00 00
14- IEND:
49 45 4E 44
15- Последние 4 байта
AE 42 60 82
Что это?
Может кто-нибудь помочь мне понять, пункты 11, 13 и 15 выше? И где значения Pixel? Изображение, имеющий (128 х 68 пикселей)
Цель знания этих деталей:
После того, как я знаю, что эти детали, я генерировать свой собственный 16 битный PNG изображение. У меня уже есть значения пикселей, поэтому моя задача - ввести заголовки и т. Д.
Я не знаю, есть ли программное обеспечение, которое может выполнять эту работу.
UPDATE
теперь я понимаю, из-за сжатия, я не смог бы найти значения пикселей.
У меня возникла мысль, что я могу написать файл в OpenCV и сохранить его как png. Ну, теперь мой прямой вопрос: у меня есть файл двоичный файл, имеющий 16-разрядные значения по шкале серого. Могу ли я написать это в OpenCV как 16-битный PNG?
Я только что заметил об компрессии, поэтому его штраф я бы не получил точные значения пикселей. Но можете ли вы рассказать мне о 11 и 15? – gpuguy
Спасибо, ваш ответ очень полезен для меня. Я проверю его, а затем опубликую результат. – gpuguy
+1 Но я не совсем согласен с тем, что «вы просто потратили впустую свое время». Изучение внутренних функций PNG может не понадобиться для вашей текущей задачи, но, тем не менее, оно учится. – leonbloy