티스토리 뷰
이번 포스트에서는 다양한 청크에 대해 알아보자.
청크의 종류는 중요 청크랑 보조 청크로 나누어진다.중요 청크는 맨 앞글자가 대문자이며, 보조 청크는 맨 앞글자가 소문자이기 때문에 쉽게 구분할 수 있다. 중요 청크에는 IHDR, IDAT, PLET, IEND 청크들이 있으며, 모든 PNG 파일에는 IHDR 청크와 IDAT 청크 IEND 청크가 들어있다.
<사진1> 청크의 이름의 맨 앞글자로 청크의 종류를 구분할 수 있다.
IHDR 청크는 "Image Header"의 약자로 PNG 파일의 기본 정보를 담고있는 청크이며, 시그니처 바로 뒤에 붙는다. IHDR 청크에는 가로, 세로, 비트 깊이, 색 타입, 압축 메소드, 필터링 메소드, 인터레이스 메소드에 대한 정보가 담겨있다.
Width와 Height는 이름에서 알 수 있듯이 이미지의 가로(폭)와 세로(높이)이다. 길이는 각각 4 bytes씩을 차지한다. 궁금하면 010에디터로 한번 열어보자.
Bit Depth를 직역하면 비트 깊이인데 한 픽셀이 차지하는 비트의 양을 의미한다. 그리고 Color Type (색깔유형)은 색의 유형을 숫자로 나타낸 값이다. 아래 표와 사진이 이해를 도와줄 것이다.
PNG image type | Color Type | Allowed bit depths | interpretation |
Grayscale | 0 | 1, 2, 4, 8, 16 | Grayscale Data |
Truecolor | 2 | 8, 16 | RGB Data |
Indexed-color | 3 | 1, 2, 4, 8 | Palette Data |
Grayscale with alpha | 4 | 8, 16 | Grayscale + Alpha Data |
Truecolor with alpha | 6 | 8, 16 | RGB + Alpha Data |
<표 1> 색 유형에 따른 비트 깊이
한글로 잘 설명해 보자면, Color Type에 들어가는 숫자는 이미지의 색 유형을 표시한다. 0번은 회색조, 2번은 RGB, 3번은 색인 색상 (뒤에서 추가 설명), 4번은 투명도가 있는 회색조 (알파가 투명도) 6번은 투명도가 있는 RGB를
의미한다. 표에 주어지지 않은 상황의 이미지 데이터는 만들 수 없다. 예를 들면 Bit Depth가 4인 truecolor같은 경우는 만들 수 없다. Bit Depth와 Color Type은 각각 1byte로 표현된다.
다음은 Compression method (압축 메소드), Filter method (필터 메소드), Interlace method (인터레이스 메소드) 가 나온다. 이들도 이름 그대로 압축, 필터, 인터레이스 하는 메소드의 종류를 숫자로 나타낸 값으로, 1byte씩을 차지한다. 압축 메소드는 현재까지0 (Deflate) 한 가지이고, 필터링 메소드도 0 (Adaptive Filtering) 한 가지이다. 인터레이스 메소드는 0 (No interlace), 1 (Adam7 interlace) 두 가지다. 인터레이스를 간단히 설명해주자면, 인터레이스 매소드는 웹 페이지 등에 이미지를 표시할 때 이미지 로딩이 완료되기 전 먼저 해상도가 낮은 이미지를 보여주기 위하여 사용된다.
<사진2> IHDR 청크 : 010 에디터
IDAT 청크는 "Image Data"의 약자로 실질적 이미지 데이터가 들어가는 부분이다. 한 개의 PNG 파일은 여러개의 IDAT 청크를 가질 수 있는데, 이는 데이터를 스트리밍 방식으로 전송하기 위한 것이다. 하나의 IDAT 청크가 이미지의 특정 부분을 나타내는 것은 아니기 때문에 모든 IDAT 청크가 있어야만 이미지 디코딩을 정상적으로 할 수 있다. IDAT 청크의 데이터는 원본 데이터가 필터링 메소드와 압축 메소드를 거친 후에 나온 것이다. 그래서 반대로 압축을 풀고 필터링을 해제하면 원본 데이터를 얻을 수 있다. (와!)
<사진3> IDAT 청크 : 010 에디터
IEND 청크는 이미지의 맨 뒤에 위치하는 청크로, 이미지 파일의 끝을 표시하는 청크이다. 아무 데이터가 없기 때문에 길이가 0이다.
혹시 좀 더 알아보고 싶다면 아래를 링크로 들어가보자. (영어를 잘한다면 ㅎㅎ)
사이트 : https://www.w3.org/TR/PNG-Introduction.html
그리고 아래 블로그도 많이 참고했다.
블로그 : https://ryanking13.github.io/2018/03/24/png-structure.html
'Reversing > PNG 파일 구조' 카테고리의 다른 글
[PNG] PNG 파일 구조의 이해 - 1 (1) | 2018.08.04 |
---|