PNG File Structure

g0ni·2024년 10월 29일

PNG File

목록 보기
1/2

PNG 파일 구조

EVERY COUNT SECOND

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 란?

공통된 데이터를 가지고 있는 데이터들의 집합.

중요 Chunk로는 IHDR, IDAT, PLTE, IEND Chunk들이 있고, 이 중 IHDR, IDAT, IEND Chunk는 PNG 파일에 반드시 포함되어야 하는 Chunk.
이외의 Chunk는 PNG 파일의 타입에 따라 요구되거나, 또는 메타데이터를 저장하는 데에 사용됨.


Chunk 구조

{
	Length (4 byte),
	Chunk Type (4 byte),
	Chunk Data (Length byte),
	CRC (4 byte)
}
  • Length : Chunk Data 의 길이.
  • Chunk Type : Chunk 타입. (IHDR, IDAT, 등등)
  • Chunk Data : 실제 데이터. (가변 길이)
  • CRC : 순환중복검사의 약자. (데이터 오류 검출용)

IHDR Chunk (Image Header Chunk)

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)
}
  • Length : IHDR Chunk의 Length는 13byte (고정)
  • Width & Height : 이미지의 폭과 높이
  • Bit depth : 한 픽셀이 차지하는 비트의 양
  • Color Type : 색의 유형
  • Compression method : 압축 방식 (PNG 표준으로 정의된 압축 방식은 0: DEFLATE 한 가지)
  • Filter method : 필터링 방식
  • Interlace method : 이미지 해당 전 이미지 해상도 ( 0 (No interlace), 1 (Adam 7 interlace)  두가지)
  • CRC

IDAT Chunk (Image Data Chunk)

실제로 이미지 데이터가 들어가는 부분.
이미지의 원본 픽셀 데이터가 필터링과 압축을 거쳐서 저장됨.

  • 인코딩 : 픽셀 데이터 → Filter → Compression → IDAT chunk data
  • 디코딩 : IDAT chunk data → Decompression → Unfilter → 픽셀 데이터

한 개의 PNG 파일에는 여러 개의 IDAT Chunk를 가질 수 있는데, 이는 데이터를 스트리밍 방식으로 전송하기 위함임.
이때 모든 IDAT Chunk가 있어야만 이미지 디코딩을 정상적으로 할 수 있음. → PNG 전체 이미지 데이터를 한꺼번에 압축한 뒤, 여러 IDAT Chunk에 나누거 담는 방식을 사용하기 때문. (1 IDAT Chunk 당 65536 byte)

  • 필터링 : 이미지 데이터의 압축률을 높이기 위하여 데이터를 가공하는 작업.
    현재 유일 PNG 표준 필터링 방식(filter 0)은 이미지의 각 행에 대하여 5가지 필터 타입 중 한 가지를 정하여 바이트 단위로 적용.

IEND Chunk

이미지의 맨 뒤에 위치하는 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-파일구조

profile
Let it rip!

0개의 댓글