# 애니메이션처럼 보이는 이미지가 움직이는 “레그레시브 JPEG”는 무엇일까요?

> https://bookfactory.kr/c/news/9114
> 게시판: 뉴스
> 작성자: tachikoma43
> 작성일: 2026-08-09T03:45:57.996Z

---

“레그레시브 JPEG”는 JPEG의 프로그레시브 표시 기능과 스캔 범위의 제어를 이용하여 단일 이미지 파일 내에 여러 이미지를 묶어 애니메이션이나 비디오처럼 보이게 하는 기술입니다. 레그레시브 JPEG에 대해 자세히 알아보는 블로그 사이트는 다음과 같습니다. Regressive JPEGs: (Maurycy's blog) https://maurycyz.com/projects/bad_jpeg/

◆레그레시브 JPEG의 작동 원리

JPEG는 이미지 데이터를 8×8 픽셀 블록으로 나누어 “분산 코사인 변환(DCT)”이라는 처리를 수행하고, 일반적으로 블록의 기초 데이터가 되는 왼쪽 상단 픽셀의 실 데이터 “DC 데이터”와 나머지 63 픽셀 분의 차분 데이터 “AC 데이터”를 추출하여 별도로 하프만 압축하여 효율적으로 데이터를 관리합니다.

레그레시브 JPEG는 이미지를 저주파 성분(대략적인 색상과 형태)에서 고주파 성분(세부적인 디테일)으로 단계적으로 표시하는 “스캔” 단위로 분할하여 저장합니다. 각 스캔의 헤더에는 컬러 채널(YCbCr), 주파수 대역(DCT 빈), 하프만 테이블 인덱스 등이 기록됩니다. 대표적인 이미지의 첫 번째 스캔은 다음과 같습니다.

FF DA – “스캔 시작” 마커
00 0C – 빅 엔디언으로 길이를 나타내는 필드(12 바이트) ※필드 자체의 길수 포함
03 – 스캔 대상 채널 수 (3)
01 – 처음 포함된 채널의 글로벌 ID
00 – 하프만 표 인덱스 #1 (DC: 0, AC: 0)
02 – 두 번째 포함되는 채널의 글로벌 ID
10 – 하프만 표 인덱스 #2 (DC: 1, AC: 0)
03 – 포함되는 세 번째 채널의 글로벌 ID
10 – 하프만 표 인덱스 #2 (DC: 0, AC: 0)
00 – DCT 빈 시작(DC)
00 – DCT 빈 종료(DC)
01 – 정밀도: Half, 기존 데이터 없음
f8ad 512d d3f1 cd96 ※하프만 부호화 DCT 계수
bcb0 58df 53d5 5d97 : :
… 컬러 채널 3개의 컬러 채널은 일반적인 RGB가 아닌 YCbCr 형식으로 사용됩니다. 輝度(Y)는 고품질로 저장되고, 색차(Cb, Cr)는 약간 흐릿해도 영향을 덜 받도록 저해상도로 저장되는 경우가 많습니다.

* 스캔의 순서와 역할 각 스캔의 구성은 다음과 같습니다.

스캔 #0: 저해상도 프리뷰 이미지
스캔 #1: 밝기(Y) 디테일 추가
스캔 #2 ~ #5: 저정밀 풀 데이터, 특히 스캔 #4가 스펙트럼 범위를 채우고 스캔 #5가 구축됨
스캔 #6 ~ #9: 최종적인 결손 비트를 추가하여 풀 퀄리티로 함.  색 정보는 해상도가 “Half”, 즉 픽셀 수의 4분의 1로 저장됩니다. 따라서 완전한 색 정보(Cb·Cr)는 밝기(Y)의 반분의 가중치만 띔니다.

◆ 여러 이미지의 융합
레그레시브 JPEG를 생성하려면 동일 해상도의 여러 JPEG 이미지를 연결하여 이미지 시작(SOI)·프레임 시작(SOF)·이미지 종료(EOI) 마커를 제거하고 단일 파일로 만듭니다. 레그레시브 JPEG 파일을 로컬에서 열어도 단순 JPEG 이미지이지만, 로컬에 비해 느린 네트워크를 통해 파일을 부분적으로 다운로드 받을 때 여러 이미지가 순차적으로 표시되므로 애니메이션처럼 보입니다.

※ 이미지 클릭 시 “애니메이션처럼 보이는” 동작을 확인할 수 있습니다.

그러나 레그레시브 JPEG에는 다음과 같은 제약 사항이 있습니다.

*   프레임 수에 제한이 있습니다. 일반적인 디코더는 무한 루프나 ZIP 폭탄 방지 등을 위해 특정 스캔 수(보통 9프레임 정도)에서 처리 처리를 중단, 본격적인 애니메이션을 구현하려면 부족합니다.
*   애니메이션화에工夫가 필요합니다. 애니메이션을 구현하려면 각 프레임의 스캔 수를 최소한으로 유지해야 합니다.

위의 내용 중 스캔 수를 최소화하는 가장 쉬운 방법은 단일 스캔만 갖는 베이스라인 모드 JPEG를 사용하는 것입니다. 하지만 베이스라인 디코더는 첫 번째 스캔만 처리한 후 중단됩니다. 반면 프로그레시브 모드에서는 중단되지 않지만, 하나의 스캔에 AC 데이터(0보다 큰 픽셀 값)와 DC 데이터(픽셀 값 0)를 모두 포함할 수 없다는 또 다른 제약이 있습니다. 또한 DC 데이터는 AC 데이터보다 먼저 와야 하므로 최소한의 프로그레시브 JPEG에는 DC만 포함하는 스캔이 하나 포함됩니다.

DC만 포함하는 스캔을 갖는 프레임은 JPEG의 표준 규격에 부합하는 이미지이며 특별한 처리가 필요 없습니다. cat > frame.scans원문 보기 | 출처: Gigazine