Cố gắng hiểu định dạng PNG.Cố gắng trích xuất các giá trị pixel từ một hình ảnh PNG cụ thể
xem xét ảnh PNG này:
Các hình ảnh được lấy từ here
Trong Hex Editor, nó trông như thế này:
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
ký tự tương đương:
‰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`‚
Cùng được trình bày ở sau Ảnh chụp màn hình của HEX Editor:
Tôi cố gắng để thiết kế đối chiếu hình ảnh này để trích xuất các phần header và các giá trị pixel RGB. Tôi đọc về số PNG và cũng là here và cho đến nay tôi đã lưu ý những điều sau về Hình ảnh này:
Đoạn IHDR phải xuất hiện FIRST. Nó chứa:
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
Dưới đây Tôi bắt đầu đọc dữ liệu HEX theo thứ tự:
1- Đầu tiên 8-byte: Đây là 8-Byte chữ ký
89 50 4E 47 0D 0A 1A 0A
Tương tự như vậy là:% PNG như có thể thấy trong HEX Editor
Hình ảnh PNG hợp lệ phải chứa IHDR đoạn, một hoặc nhiều đoạn IDAT và đoạn IEND.
2- Chunk: Chiều dài
00 00 00 0D
3-Chunk: Chunk Loại
49 48 44 52
Đó là IHDR.
http://www.w3.org/TR/PNG-Chunks.html
4- Chunk: Chiều rộng của hình ảnh (trong số thập phân 128)
00 00 00 80
5- Chunk: Chiều cao của hình ảnh (trong số thập phân 68)
00 00 00 44
6- Đoạn: BIT DEPTH (1 byte)
08
7- Chunk: Loại Màu
02
8- phương pháp nén
00
9- phương pháp lọc:
phương pháp10 Interlace:
00
11- dữ liệu sau là gì?
C6 25 AA 3E 00 00 00 C2
12-- IDAT
13- dữ liệu này (sau khi IDAT) là gì:
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 00 00 00 00 00 00 00 00 00 00 00 00 00 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
14- IEND:
49 45 4E 44
15 Bài 4 byte
AE 42 60 82
đây là những gì?
Một số người có thể giúp tôi hiểu, điểm 11, 13 và 15 ở trên không? Và giá trị Pixel ở đâu? Image là có (128 x 68 pixel)
Mục đích của việc biết những chi tiết này:
Khi tôi biết những chi tiết này, tôi sẽ tạo ra 16 bit PNG hình ảnh của riêng tôi. Tôi đã có giá trị pixel, vì vậy công việc của tôi sẽ là giới thiệu tiêu đề, v.v.
Tôi không biết liệu có phần mềm nào có thể thực hiện công việc này hay không.
CẬP NHẬT
Tôi hiểu bây giờ bởi vì nén, tôi sẽ không thể xác định vị trí các giá trị pixel.
Tôi có ý tưởng rằng tôi có thể viết một tệp trong OpenCV và lưu nó dưới dạng png. Giờ thì câu hỏi trực tiếp của tôi là: Tôi có một tệp nhị phân có giá trị 16 bit pixel màu xám. Tôi có thể viết điều này trong OpenCV dưới dạng PNG 16 bit không?
Tôi vừa nhận thấy về Nén, vì vậy tôi không thể nhận được các giá trị Pixel chính xác. Nhưng bạn có thể cho tôi biết khoảng 11 và 15 không? – gpuguy
Cảm ơn, câu trả lời của bạn rất hữu ích đối với tôi. Tôi sẽ kiểm tra nó và sau đó đăng kết quả. – gpuguy
+1 Nhưng tôi không hoàn toàn đồng ý với "Bạn chỉ lãng phí thời gian của bạn". Việc tìm hiểu về các phần bên trong của PNG có thể không cần thiết cho công việc hiện tại của bạn, nhưng nó vẫn là học tập. – leonbloy