
PNG 파일의 경우 Header, Chunk, Footer로 구성.
Header Signature : 89 50 4E 47 0D 0A 1A 0A
Footer : 49 45 4E 44 AE 42 60 82 → IEND Chunk (Chunk type + CRC)
공통된 데이터를 가지고 있는 데이터들의 집합.
중요 Chunk로는 IHDR, IDAT, PLTE, IEND Chunk들이 있고, 이 중 IHDR, IDAT, IEND Chunk는 PNG 파일에 반드시 포함되어야 하는 Chunk.
이외의 Chunk는 PNG 파일의 타입에 따라 요구되거나, 또는 메타데이터를 저장하는 데에 사용됨.
{
Length (4 byte),
Chunk Type (4 byte),
Chunk Data (Length byte),
CRC (4 byte)
}
PNG 파일의 가장 앞에 위치하는 Chunk.
PNG 이미지의 크기, 필터링 방식, 압축 방식 등을 알려줌.
{
Length : 00 00 00 0D (13 byte),
Chunk Type : IHDR (4byte),
Chunk Data (13 byte)
{
Width (4 byte),
Height (4 byte),
Bit depth (1 byte),
Color Type (1 byte),
Compression method (1 byte),
Filter method (1 byte),
Interlace method (1 byte),
},
CRC (4 byte)
}
실제로 이미지 데이터가 들어가는 부분.
이미지의 원본 픽셀 데이터가 필터링과 압축을 거쳐서 저장됨.
한 개의 PNG 파일에는 여러 개의 IDAT Chunk를 가질 수 있는데, 이는 데이터를 스트리밍 방식으로 전송하기 위함임.
이때 모든 IDAT Chunk가 있어야만 이미지 디코딩을 정상적으로 할 수 있음. → PNG 전체 이미지 데이터를 한꺼번에 압축한 뒤, 여러 IDAT Chunk에 나누거 담는 방식을 사용하기 때문. (1 IDAT Chunk 당 65536 byte)
이미지의 맨 뒤에 위치하는 Chunk. (파일의 끝을 나타냄.)
데이터를 담는 목적으로 사용하지 않으므로 Length 값은 0.
{
Length : 00 00 00 00 (0 byte),
Chunk Type : IEND (4 byte) (49 45 4E 44),
Chunk Data (0 byte),
CRC (4 byte)
}
Chunk Type + CRC = Footer Signature
Reference
https://www.w3.org/TR/png/
https://eece-labs.tistory.com/7
https://mineeeee.tistory.com/entry/PNG-파일구조