GIF file format 정리

GIF(Graphic Interchange Format)파일은 인터넷에서 많이 사용되는 이미지 형식 중 하나다.

- 개발자 : CompuServe
- 라이센스 소유: CompuServe
- Version : 87a, 89a 
- 릴리즈 : 1987년
- 이미지 압축 : LZW 사용
- 컬러 : 최대 256색의 RGB를 사용


GIF 파일 구조 및 구성 요소

GIF 파일은 이미지의 정보를 가지고 있는 Control Block과 렌더링할 이미지 데이터를 가지고 있는 Graphic Rendering Block. 그리고, 특수 목적으로 사용되는 Special Purpose Block으로 구성되어 있다.
 
일반적인 version 89a파일의 경우 보통 아래와 같은 구조로 되어 있다. 전체 GIF 파일의 정보를 가진 Descriptor가 맨 앞에 있고, 그 뒤로 이미지별 Descriptor와 압축된 이미지 데이터, 그리고 마지막엔 Trailer가 존재한다. 

|  Header   |  Logical Screen Descriptor  |  Global Color Table  |
|  Graphic Control Extension  |  Image Descriptor  |  Local Color Table  |  Image Data | 
|  Graphic Control Extension  |  Image Descriptor  |  Local Color Table  |  Image Data | 
...
|  Graphic Control Extension  |  Image Descriptor  |  Local Color Table  |  Image Data | 
|  Trailer  |


  • Header
signature인 'GIF'와 버전 정보 '87a' 또는 '89a'를 가지고 있다.


  • Logical Screen Descriptor, Global Color Table

이미지의 크기 및 글로벌 컬러 테이블 유무의 정보들을 가지고 있다. Global Color Table Flag와 Size of Global Color Table의 정보에 따라 글로벌 컬러 테이블의 유무와 크기가 결정된다. 컬러 테이블은 RGB 형식으로 컬러 정보를 가지고 있다. Logical Screen Descriptor은 Header 바로 뒤에 따라와야 한다.

아래 실제 GIF 파일에서 header와 Logical Screen Descriptor, Global Color Table을 보여주고 있다.  
예제에서는 이미지의 크기는 1024x614이며 Global Color Table이 존재하고 크기는 3 * 2^(6+1) =384 bytes이다. 



  • Graphic Control Extension 

Graphic Rendering Block에 필요한 정보가 들어있다. 
이미지의 Disposal 방식, 사용자의 input 대기 여부, Delay Time정보 등이 들어있다. Delay Time의 해상도는 1/100초이다. 


  • Image Descriptor, Local Color Table
스트림 내의 각 이미지 들은 Image Descriptor의 정보를 이용해 이미지를 구성한다. Image Descriptor는 가상 화면내에서의 위치, 로컬 컬러 테이블 유무 및 크기 등의 정보가 들어있다.


  • Image Data 

Image Data는 여러 개의 Sub-Block으로 나누어져 있으며, 마지막에는 Block Terminator(=0x00) 가 들어간다. Sub-Block은 1byte의 길이 정보와 길이 정보에 해당하는 데이터로 이루어져 있다.  이 LZW로 압축된 이미지는 Sub-Block으로 나누어져 Image Data에 들어간다. 


아래 이미지는 실제 GIF 파일에서 Graphic Control Extension, Image Descriptor 및 Image Data가 저장된 예이다. 
예에서는 Graphic Control Extension의 delay time 0x0A로 100ms이며, Image Descriptor에서 이미지의 위치는 left 0, top 0, width 1024, height 614이고 Local color Table은 존재 하지 않는다.  



  • Trailer 
GIF 파일의 끝에는 Trailer가 들어 있으며, 그 값은 0x3B로 고정되어 있다.


  • Comment Extension
GIF 데이터에 대한 코멘트 정보가 text형식으로 들어 있다. 데이터는 sub-block으로 나눠져 삽입된다.


  • Plain Text Extension

렌더링할 문자 데이터와 위치 등의 정보가 들어 있는 Block이다. Text데이터는 sub-block으로 나눠져 파일에 삽입된다.


  • Application Extension

응용프로그램의 정보가 들어있는 Block으로 아래 이미지와 같이 응용프로그램의 정보가 들어있다.



본 포스트의 예제에 사용된 gif 파일은 위키피디아에서 다운받아 사용하였다.


https://upload.wikimedia.org/wikipedia/commons/0/03/Covid-19-Breaking-bubbles-02.gif

댓글

이 블로그의 인기 게시물

간단한 cfar 알고리즘에 대해

windows에서 간단하게 크롬캐스트(Chromecast)를 통해 윈도우 화면 미러링 방법

쉽게 설명한 파티클 필터(particle filter) 동작 원리와 예제

base64 인코딩 디코딩 예제 c 소스

간단한 칼만 필터(Kalman Filter) 소스 코드와 사용 예제