GIF 파일이란?
GIF 또는 그래픽 교환 형식은 고도로 압축된 이미지 유형입니다. Unisys가 소유한 GIF는 이미지 품질을 저하시키지 않는 LZW 압축 알고리즘을 사용합니다. 각 이미지에 대해 GIF는 일반적으로 픽셀당 최대 8비트를 허용하고 이미지 전체에 최대 256개의 색상을 허용합니다. JPEG 이미지와 대조적으로 최대 1600만 색상을 표시할 수 있고 인간의 눈의 한계에 상당히 닿습니다. 인터넷이 등장했을 때 GIF는 낮은 대역폭이 필요하고 단색 영역을 소비하는 그래픽과 호환되기 때문에 최고의 선택으로 남아 있었습니다. 애니메이션 GIF는 수많은 이미지 또는 프레임을 단일 파일로 결합하고 이를 시퀀스로 표시하여 애니메이션 클립 또는 짧은 비디오를 생성합니다. 색상 제한은 각 프레임에 대해 최대 256이며 색상 그라디언트로 다른 이미지 및 사진을 재생하는 데 가장 적합하지 않을 수 있습니다.
GIF 파일 형식
개념적으로 GIF 파일에는 0개 이상의 이미지로 채워진 고정 크기의 그래픽 영역이 있습니다. 일부 GIF 파일은 고정 크기의 그래픽 영역이나 블록을 애니메이션 GIF의 경우 애니메이션 프레임으로 작동할 수 있는 하위 이미지로 나눕니다. GIF 형식은 1~8비트의 픽셀 깊이를 사용하여 비트맵 데이터를 저장합니다. RGB 색상 모델 및 팔레트 데이터는 항상 이미지를 저장하는 데 사용됩니다. 버전에 따라 고정 길이 헤더(“GIF87a” 또는 “GIF89a”)가 일반적인 GIF 파일의 시작을 정의합니다.
현재 GIF의 두 가지 버전인 87a 및 89a를 사용할 수 있습니다. 전자는 원본 GIF 형식이고 후자는 새로운 GIF 형식입니다. 이 파일 형식에서 블록의 특성과 픽셀 치수는 고정 길이 Logical Screen Descriptor에 언급됩니다. Global Color Table의 존재와 크기는 화면 설명자에 의해 지정될 수 있으며, 존재하는 경우 추가 세부 사항을 추적합니다. 트레일러는 ASCII 세미콜론의 단일 바이트를 보유하는 파일의 마지막 바이트입니다. 일반적인 GIF87a 파일 레이아웃은 다음과 같습니다.
헤더
헤더는 6바이트를 보유하며 파일 유형을 GIF로 지정하는 데 사용됩니다. Logical Screen Descriptor는 실제 헤더와 분리되어 있지만 때때로 두 번째 헤더로 간주됩니다. 헤더를 저장하는 데 사용되는 동일한 구조가 논리 화면 설명자를 저장할 수 있습니다. 모든 GIF 파일은 3바이트 서명으로 시작하고 “GIF” 문자를 식별자로 사용합니다. 버전도 크기가 3바이트이며 GIF 파일의 버전을 선언합니다.
논리적 화면 설명자
고정 길이 이미지 설명자는 GIF 이미지를 만드는 데 필요한 화면 및 색상 정보를 지정합니다. Height 및 Width 필드는 이미지 데이터를 표시하기 위해 의무적으로 화면 해상도의 가장 작은 값을 포함합니다. 디스플레이 장치가 지정된 해상도를 표시할 수 없는 경우 이미지를 적절하게 표시하기 위해 스케일링이 필요합니다. 화면 및 색상 맵 정보는 아래 표의 4개 하위 필드로 표시됩니다(비트 0은 최하위 비트).
비트 | 서브필드 |
---|---|
0-2 | 전체 색상표의 크기 |
3 | 색상표 정렬 플래그 |
4-6 | 색상 해상도 |
7 | 글로벌 컬러 테이블 플래그 |
글로벌 색상표
논리적 화면 설명자 바로 뒤에 선택적 글로벌 색상표가 배치됩니다. 이 테이블은 이미지 데이터 내부의 픽셀 색상 데이터를 인덱싱하기 위해 매핑됩니다. 전역 색상표가 없으면 GIF 파일의 각 이미지는 로컬 색상을 사용합니다. 전역 및 로컬 색상표가 모두 없는 경우 기본 색상표를 제공하는 것이 좋습니다. 일련의 3바이트 트리플이 색상표의 요소를 구성합니다. 각 바이트는 RGB 색상 값을 특성화합니다. 빨강, 녹색 및 파랑 색상은 각 색상표 요소의 값으로 사용됩니다. 글로벌 색상표의 항목은 최대 256개 항목에 도달하고 항상 2의 거듭제곱으로 나타냅니다.
이미지 데이터
이미지 데이터는 LZW로 인코딩된 데이터와 함께 인코딩되지 않은 심볼 바이트와 하위 링크 목록을 저장합니다.
예고편
Trailer는 파일의 마지막 문자인 단일 바이트의 데이터를 나타냅니다. 이 바이트의 값은 영구적으로 3Bh이며 데이터 스트림의 끝을 지정합니다. 모든 GIF 파일은 각 파일의 마지막에 예고편이 있어야 합니다.