티스토리 뷰

테크

GIF와 JPEG

이명헌 2020. 7. 22. 00:27

1999-9-18

GIF 와 JPEG의 역사

GIF(Graphic Interchange Format)는 온라인 서비스인 아메리카온라인(AOL)이 급성장하면서 몰락의 길을 걷게 된 경쟁사 컴퓨서브(Compuserve)에서 Steve Wilhite 씨가 개발을 시작해서 1987년에 완성한 포맷입니다. 이름처럼 최초에는 온라인 상에서 그림 파일 전송을 위해 개발되었으므로 높은 압축률이 매우 중요한 요구사항이었고, 특히 당시의 느린 모뎀 속도를 생각해 볼 때 가능하면 이미지 사이즈를 작게 만드는 것이 매우 중요했습니다. 느리다는 정도가 지금으로선 상상도 할 수 없을 만큼 느린 속도였기 때문에 간단한 도표나 그래프 등의 그림을 전송한다는 것 자체가 엄청난 시간을 잡아먹는 일이었구요. GIF 개발을 진행한 컴퓨서브는 그런 느린 속도에서 그래픽 파일을 원활하게 전송해야하겠다는 것과 함께 다양한 하드웨어에서도 호환성의 문제 없이 파일을 전송하고 열어볼 수 있게 만들겠다는 목표로 개발을 진행합니다.

 

 

그렇게 탄생한 GIF는 온라인 서비스들이 쇠락하고 팀 버너스 리가 WWW을 만들어 내면서 도리어 확산에 날개를 달게 됩니다. 다양한 웹 브라우져를 통해서 GIF 파일이 전송되어서 컨텐츠를 풍성하게 해주었구요, 초기 웹 브라우져들은 GIF를 별도의 그래픽 프로그램으로 띄우는 한계를 가진 데 반해 모자익(Mosaic) 웹 브라우져부터 페이지 안에서 GIF 파일을 같이 보여줄 수 있게 되면서 지금 보는 것과 같은 다채로운 컨텐츠 표현 양식이 시작될 수 있었던 것입니다. 당시의 컴퓨터들은 대부분 256컬러까지 지원하고 있었기 때문에 256 컬러만 지원했고, 그런 커다란 한계에도 불구하고 GIF만의 독특한 장점이 있기 때문에 JPEG과 함께 인터넷 그래픽 파일 포맷의 주류로 여전히 살아남아 있습니다. 

 

JPEG은 포맷을 개발한 팀의 이름이 Joint Photographic Experts Group이어서 그 첫 글자를 따서 명명되었습니다. 그룹 이름에 사진 전문가라는 표현이 있는 데서 알 수 있듯, JPEG은 사진처럼 현실감 있는 그래픽을 작은 사이즈로 압축하기 위해 개발되었습니다. GIF와는 개발 의도부터 큰 차이가 있었던 것이지요. 수천 컬러, 수백만 컬러 이상의 사진을 당시의 느린 속도에서 원활하게 전송하기 위해 어느 정도의 손실을 감안하고서도 파일을 압축을 한 것입니다. GIF가 컬러를 제한하면서 손실없는 압축을 기초로 한 데 반해 JPEG은 훨씬 대용량의 풍부한 컬러를 가진 사진 파일 전송을 위해 화질의 손실을 감수한 것입니다. 어떤 사람들은 JPEG이 그래픽 포맷이라고 할 수 없다고 주장하기도 합니다. JPEG은 개별 포맷이라기보다 TIFF나 JFIF(JPEG Interchange File Format)을 압축하는 데 쓰이는 하나의 방식이기 때문입니다.

압축 원리

GIF 압축방식의 원리인 LZW(Lempel-Ziv Welch) 알고리듬은 상당히 복잡합니다. 검색엔진에서 LZW라고 쳐 보면 수 십개의 페이지를 찾을 수 있습니다. 저도 자세히 모르기 때문에 대략 어떤 것이다 정도로만 얘기를 해보겠습니다. 우리가 보고 있는 모니터 화면의 픽셀은 삼원색의 조합입니다. 삼원색 값의 조합을 달리함으로써 픽셀 별로 다른 색깔을 나타냅니다. 이 때, 원색 하나 당 8비트라고 하면 한 픽셀은 8비트 x 3 = 24비트가 됩니다. 검은색을 표현한다면 빨강, 파랑, 녹색 모두 다 십진수 0(16진수 00, 2진수 00000000)입니다. 반대로 흰색은 삼원색 모두 최대값인 십진수 255(16진수 ff, 2진수 111111111) 값을 가지면 됩니다. 이렇게 픽셀별로 삼원색의 값을 조합하면 다양한 컬러를 표현할 수 있습니다.

 

삼원색의 각 컬러 하나 당 8비트라고 했는데 그렇다면 총 몇 가지 색깔을 표현할 수 있을까요? 픽셀의 컬러를 빨강-녹색-파랑(RGB;Red-Green-Blue)의 순서로 조합한다고 합시다. 검은색 픽셀은 10진수로 표현하면 (0,0,0)입니다. 흰색은 (255,255,255)입니다. 빨간색 원색은 (255,0,0)입니다. 파란색 원색은(0,0,255)입니다. 회색은 빨강, 녹색, 파랑이 각각 반씩 켜진 상태이므로 (128,128,128)입니다. 이런 방식으로 표현할 수 있는 컬러의 총 갯수는 원색 하나 당 256개의 값을 가질 수 있으므로, [256 x 256 x 256 = 16,777,216]컬러가 됩니다. "24비트 컬러"가 1670여만 컬러를 표현할 수 있는 이유가 이것입니다.

 

GIF는 픽셀 하나하나에 일일이 원색 별로 값을 매기지는 않습니다. 대신, 256개의 색상으로 구성된 컬러 팔레트를 갖고 있어서 특정 픽셀이 어떤 (r,g,b) 값을 갖는다면 이 순서쌍에 대응하는 컬러 팔레트 상의 값을 이용합니다. raster 데이타란 픽셀별로 값을 지정하는 형태의 데이타를 뜻합니다. 그러므로 각 픽셀마다 256 컬러 중 어떤 것인지 값을 갖게 되고 이 데이타를 좌측 상단 픽셀부터 시작해서 순서대로 모은 것이 GIF의 raster 데이타가 되는 것입니다. 그 raster 데이타 값들은 컬러 팔레트 상의 값이므로 중복된 숫자가 많고 그걸 압축하는 알고리듬 중 하나가 LZW 알고리듬입니다. 알고리듬에 관한 자세한 내용은 이 글의 범위를 넘어서므로 여기서 줄입니다.

 

 

JPEG은 GIF와 달리 컬러 정보의 문자열을 압축하지 않습니다. JPEG은 인간 시각의 맹점을 이용합니다. 사람의 시각은 밝기의 차이에는 민감하게 반응하지만 색깔이 달라진 것은 잘 분간하지 못합니다. JPEG은 일단 일반적인 픽셀의 RGB 컬러 데이타를 밝기를 나타내는 부분과 색상을 나타내는 부분으로 변환합니다. 그 다음, 밝기 정보를 담고 있는 부분은 그대로 두고 색상 정보를 담고 있는 부분만 그 픽셀에 인접한 두 픽셀 색상의 평균값을 사용합니다. 색상 정보가 인접 픽셀의 색상 정보로 표현되므로 정보의 양이 줄어드는 것입니다. 압축되는 것입니다.

 

JFIF 포맷에서 사용하는 "YCbCr"이란 방식을 예로 들어 봅시다. Y는 밝기 정보입니다. Cb와 Cr은 컬러 스케일입니다. JPEG 방식은 보통의 RGB 컬러를 밝기와 컬러 스케일로 수학적 변환을 한 다음, 밝기를 나타내는 Y는 그대로 두고 Cb와 Cr은 인접한 두 개의 픽셀 Cb,Cr의 평균값으로 대체합니다. 따라서 전체 이미지 사이즈는 2/3로 줄어듭니다. 3개 픽셀 대신 2개가 남기 때문입니다. 이 때, 우리 눈에 민감하게 느껴지는 밝기 정보는 그대로 유지되면서 색상만 바뀌므로 화면상에 비치는 이미지는 별로 변화가 없어 보입니다. 그 다음, 이미지를 8 x 8 블럭으로 나눕니다. 그리고 각 블럭의 밝기 정보와 색상 정보를 DCT라는 복잡한 수학적 과정을 통해 처리해서 이미지 사이즈를 더 줄입니다. 알고리듬의 자세한 내용은 모르더라도 한 가지 분명한 것은 JPEG이 몇 개를 줄여서 평균값을 사용한다는 점입니다. 정보를 잃어 버리는 부분이 있습니다. lossy compression이란 그런 뜻입니다. GIF 포맷처럼 기존 정보를 그대로 유지하면서 압축을 하지 않고 없어지는 정보가 있습니다. 손실압축임에도 우리 눈에는 비슷해 보입니다. 이런 JPEG 방식을 통하게 되면 3 메가 바이트 이미지가 불과 180 KB로 줄어듭니다.

 

한편, GIF의 기초가 된 LZW 알고리듬에 대한 소유권을 주장하면서 유니시스(Unisys)라는 회사가 GIF  파일 사용에 대해 사용료를 받겠다고 법적 대응에 나서면서 당시 인터넷에서는 커다란 논란이 일기도 했습니다. 

GIF와 JPEG

사진 같은 이미지는 JPEG으로 압축하는 것이 좋습니다. GIF는 256컬러밖에 지원하지 않으므로 사진을 압축하는 데 사용하기가 곤란합니다. 반대로 256컬러 이하를 사용한 그림, 챠트, 도표는 GIF로 압축하는 것이 훨씬 더 유리합니다. 이미지의 손실이 없이 또렷한 그래픽을 빠른 속도로 전송할 수 있기 때문입니다. 

 

압축률은 이미지가 어떤 것인가에 따라 달라진다고 합니다. 대체로 사진 같은 이미지일수록 JPEG이 훨씬 더 월등한 압축률을 보여준다고 합니다. 사용 색상이 256 컬러 이하인 경우엔 GIF 쪽이 더 우수한 경우가 많습니다. JPEG은 또한 또렷한 라인을 만드는 데는 사용되기 힘듭니다. 인접 픽셀들의 평균값을 쓰기 때문에 선명한 경계를 갖는 이미지를 만들기가 곤란합니다. 명확한 선분을 그릴 때는 GIF가 더 적절합니다.

GIF가 많은 한계를 갖고 있음에도 수십 년 이상 살아남고 또 최근 다시 사용이 늘어나고 있는 이유 중 하나는 확장성입니다. GIF 개발자가 최초 개발 당시부터 포맷의 확장성을 용이하게 해서 이후 animated GIF라는 움직이는 그래픽이 나타나고 또 큰 인기를 모읍니다. 2020년에는 GIPHY.COM이라는 animated GIF 전문 웹 싸이트가 페이스북에 무려 4억 달러에 매각되기도 하구요. 과거 GIF 관련 저작권 소송 이력 때문인지 페이스북에 의한 인수가 GIF 포맷 사용을 다시 제한하는 것 아닌가 하는 우려도 있습니다.

 

GIF는 또한 배경색을 투명으로 할 수 있어서 WWW 초창기 때부터 많은 디자이너가 활용을 해왔고 이 부분은 JPEG으로는 구현하기 힘듭니다. 이런 독특한 면모를 가진 포맷이기에 오래되고 제한점이 많지만 여전히 큰 인기를 누리며 사용되고 있습니다. 

 

 

 
반응형
댓글