역진행(Regressive) JPEG
요약
본 글은 애니메이션 GIF나 일반적인 이미지 포맷의 한계를 넘어, '역진행(Regressive) JPEG'와 같은 기법을 활용하여 데이터 전송 및 시각화에 새로운 가능성을 탐구합니다. 이 기술은 스테가노그래피, AI 교란, 지연 시간 제어 등 다양한 분야에서 응용될 수 있으며, 웹 서버의 MIME 타입이나 Service Worker를 이용해 재생 속도를 정교하게 제어하는 방법을 다룹니다.
핵심 포인트
- 역진행 JPEG는 데이터 전송 및 시각화에 새로운 가능성을 제시합니다.
- 스테가노그래피나 AI 교란 등 보안/정보 은닉 목적으로 활용될 수 있습니다.
- 웹 서버의 MIME 타입(multipart/x-mixed-replace)을 이용해 실시간 스트리밍이 가능합니다.
- JPEG 프로그레시브 모드는 여전히 파일 크기 절감 및 저해상도 미리보기 기능에 유용합니다.
PNG를 애니메이션으로 만들려고 편법을 쓰는 동안, APNG는 옆에서 “나도 존재해!”라고 외치는 듯함
20년 전 직장의 지도 애플리케이션에 실시간 대기질 레이어를 추가하려고 애니메이션 GIF로 같은 작업을 했음. 이미지는 Java2D로 렌더링했고, 점군 대신 그라데이션 덩어리를 만들려고 JOGL 버전도 개발했지만 서버 관리자가 OpenGL 드라이버 설치를 허용하지 않아 완성하지 못함
저주받은 기법이지만 확실히 여기에 어울림
대형 기술 기업들은 이걸 브라우저 지문 채취에 어떻게 활용할지 고민할 듯함
이 기법으로 데이터를 눈앞에 숨기는 스테가노그래피가 가능한지 궁금함. 자동 이미지 분석 프로그램 대부분은 마지막 이미지만 검사할 가능성이 높아, 학생들이 학교의 콘텐츠 필터를 우회하는 데 쓸 수도 있어 보임
사람에게 보낼 메시지는 첫 프레임에, AI에게 보낼 메시지는 마지막 프레임에 넣는 AI 교란 기법으로 쓸 수 있음. 고양이 사진을 서로 보내 Skynet을 물리치는 셈임
일반적인 스테가노그래피보다 나을 방법은 없어 보임
같은 네트워크에서 병렬로 불러오는 작업의 진행 표시줄로 활용해 사용자가 남은 지연 시간을 가늠하게 할 수 있지 않을까 싶음
4chan 같은 곳에서는 불쾌하거나 불법적인 이미지를 숨기는 데 악용돼 이런 동작을 완전히 차단한 것으로 기억함
웹 서버가 즉석에서 “JPEG”를 생성해 시간 간격을 둔 조각으로 클라이언트에 보내면 재생 시점을 어느 정도 제어할 수 있음. 웹캠을 소스로 삼으면 끝없이 이어지는 “JPEG”도 가능함
이미 일부 웹캠이 multipart/x-mixed-replace 라는 MIME 기법으로 이를 구현함. 서버가 방금 보낸 데이터를 새 데이터로 교체하라고 클라이언트에 지시하는 방식이며, JavaScript 없이 일반 HTTP와 JPEG만으로 작동함
GIF로도 가능함. 한 번은 GIF를 프레임 단위로 보내고 이미지 맵으로 클릭을 처리해, JavaScript 없이 원격 데스크톱처럼 쓸 수 있는 장난감 CGI를 만들었음. JPEG가 더 나았을 수도 있어 다시 시도해볼 만함
Service Worker로 느린 연결을 흉내 내면 재생 속도를 제어할 수 있음
환경에 따라 동작이 다른 점이 이상함. 데스크톱 Firefox에서는 제대로 재생되지만 iOS 모바일에서 “JPEG 안의 전체 영상”은 거의 단색인 갈색→주황색→빨간색 프레임 3개와 흐릿한 고양이 윤곽만 보임
색이 프레임마다 바뀌어 작동 중인 건 알 수 있지만 영상이라 부르기는 어려움. 데스크톱에서는 실제 영상처럼 재생돼 놀랐고, iOS 이미지 디코더의 특이한 경계 조건을 건드리는 듯함
최근 OpenGL과 jpeg-turbo로 이미지를 빠르게 표시하는 작업을 했는데, JPEG의 프로그레시브 모드를 켜면 디코딩이 크게 느려졌음. 프로그레시브 JPEG가 있으면 좋다는 옛 조언은 이제 유효하지 않을 가능성이 큼
수십 년간 이미지가 단계적으로 선명해지는 모습을 거의 보지 못했으므로 실질적인 가치도 없어 보임
페이지가 로드된 직후 이미지가 약간 흐렸다가 다음 단계에서 선명해지는 모습을 놓쳤을 수도 있음. 예전처럼 첫 단계가 알아보기 어려울 정도는 아니지만, 전체 파일 크기의 약 30%만으로 저해상도 미리보기를 거의 공짜로 제공하는 가치는 여전히 있음
인코더로 cjpegli를 쓰는데, 기본값인 프로그레시브와 전체 4:4:4 조합에서 압축률이 가장 좋으므로 단순한 부가 기능만은 아님
프로그레시브로 저장한 JPEG 사진은 보통 약 5% 더 작고, JPEG를 프로그레시브 형식으로 무손실 변환하는 것도 가능함. JPEG XL로 무손실 변환하면 공간을 더 절약할 수 있음
AI 자동 생성 콘텐츠
본 콘텐츠는 GeekNews의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기