jpg, png, gif의 차이

형식, 확장자

파일은 비트의 연속이다. 따라서 파일의 내용을 해석하기 위해서는 컨텍스트가 필요하다. 컨텍스트는 파일 내용을 해석하기 위한 관점이다. 형식(확장자)는 파일 내용을 해석하는 기준 중에 하나다.


이미지 파일: jpg, png, gif

이미지 파일의 확장자는 jpg, png, gif 등이 있다. 동일한 이미지라도 목적, 기능, 압축 방식에 따라 확장자가 구분된다.

 

jpg(Joint Photographic Experts Group)

jpg는 손실 압축 방식에 따라 저장한 이미지 파일이다. 이미지 원본이 훼손되지만 용량을 줄일 수 있다. 디테일이 덜 중요하고 전송속도가 빨라야하는 환경에 적합한 저장방식이다. 투명도를 지원하지 않는다. 쇼핑몰의 상품 이미지 등에 쓰인다.

 

png ( Portable Network Graphics )

png는 무손실 압축 방식을 따른 이미지 파일이다. 이미지 원본이 훼손되지 않고 용량을 줄이기 때문에 jpg에 비해 저장공간을 많이 차지하지만 품질이 좋다. 투명도도 지원하기 때문에 배경이 투명한 이미지에 사용하기도 좋다. 그래픽, 로고, 아이콘 등에 사용한다. 24비트 색상을 사용한다.

 

gif ( Graphics Interchange Format )

gif는 무손실 압축 방식를 따른 이미지 파일이다. 색상은 8비트만 지원한다. 투명도도 지원한다. 간단한 애니메이션을 만들 때 사용한다.

 


손실 압축 방식

왼쪽으로 갈 수록 압축률이 높음(wikipedia)

데이터 원본의 일부 정보를 제거하여 파일 크기를 줄이는 방식이다. 제거 된 데이터는 복원 할 수없다. 파일의 크기를 상당히 줄일 수 있어 저장 공간을 효율적으로 사용한다. 그리고 빠르게 전송할 수 있다. 하지만 원본 품질이 떨어지고 압축률이 높을수록 화질이 감소한다.

 

 

무손실 압축 방식

wikipedia

원보 데이터의 손실 없이 압축하는 방식이다. 중요한 데이터나 텍스트 파일을 다룰 때 유용하다. 다만 손실압축방식보다 압축률이 낮을 수 밖에 없어 네트워크 전송에 느릴 수 있다.

 

사용사례

  • 손실 압축: 인터넷 스트리밍, 웹 이미지, 대용량 미디어 파일(예: 유튜브 비디오 스트리밍, 웹사이트의 JPEG 이미지)
  • 무손실 압축: 원본 품질 유지가 중요한 데이터(예: 고해상도 사진, 문서 아카이브, 프로페셔널 음악 녹음)

JPG의 압축 원리

JPEG압축 기술은 인간의 눈이 인식할 수 없는 정보를 제거해 파일 크기를 줄인다.

1. 색 공간 변환 (Color Space Conversion)

  • RGB → YCbCr: JPEG는 RGB(빨강, 초록, 파랑) 색 공간을 YCbCr 색 공간으로 변환한다. 
  • Y는 이미지의 밝기 정보, CbCr는 색상 정보를 나타낸다.

2. 하위 샘플링 (Subsampling)

  • 색상 해상도 감소: 사람의 눈은 색상 변화에 비해 밝기 변화에 더 민감하므로, 색상 정보(Cb, Cr)의 해상도를 줄이는 하위 샘플링을 적용한다. 일반적으로 4:2:0 또는 4:2:2 포맷이 사용되며, 이로 인해 색상 정보는 상대적으로 적은 데이터로 압축된다.
  • 예시: 4:4:4 포맷은 밝기(Y)와 색상(Cb, Cr)의 해상도가 같은 반면, 4:2:0 포맷은 색상 해상도가 낮다.

3. 블록 단위 변환 (Block-Based Transformation)

  • 8x8 블록으로 분할: 이미지를 8x8 크기의 블록으로 나눈 후 각 블록을 독립적으로 처리한다.
  • DCT(Discreet Cosine Transform): 각 블록에 대해 DCT를 적용하여 공간 영역 데이터를 주파수 영역 데이터로 변환한다. DCT는 고주파 성분(세부적인 정보)을 제거하는 데 유리하며, 이미지의 시각적 품질에 큰 영향을 미치지 않도록 한다.
  • 결과: DCT 변환 후, 블록은 저주파 성분(이미지의 주요 정보)과 고주파 성분(세부 정보)으로 분리된다.

4. 양자화 (Quantization)

  • 정보 손실 적용: DCT 결과의 주파수 성분을 양자화하여 데이터의 정확도를 줄인다. 이 단계는 압축률을 높이기 위해 고주파 성분을 더 많이 줄이는 방식으로 손실 압축을 적용한다.
  • 양자화 행렬: 각 블록의 DCT 계수는 사전에 정의된 양자화 행렬을 사용해 나눠지고, 나머지를 반올림하여 압축 효율을 높인다. 이 과정에서 데이터 손실이 발생하지만, 일반적으로 시각적 품질에 큰 영향을 주지 않는다.

5. 엔트로피 인코딩 (Entropy Encoding)

  • 허프만 코딩: 양자화된 DCT 계수를 허프만 코딩 또는 산술 코딩을 사용해 압축한다. 이 단계는 빈번히 나타나는 데이터를 짧게 인코딩하여 전체 데이터의 압축률을 증가시킨다.
  • 예시: 허프만 코딩은 데이터의 빈도에 따라 가변 길이 코드를 할당하여 빈번한 데이터는 짧게, 드문 데이터는 길게 인코딩한다.

PNG 압축 원리

1. 필터링 (Filtering)

PNG는 이미지의 각 행을 대상으로 필터링을 적용한다. 필터링은 각 픽셀의 값을 이전 픽셀과 비교하여 예측값을 계산하고, 원래 픽셀 값과의 차이(잔여 값)를 저장하는 방식이다. 필터링을 통해 데이터의 중복성을 줄이고 압축률을 높일 수 있다.

  • 필터 방식: PNG는 여러 가지 필터링 방식을 제공한다. 각 행에 대해 None, Sub, Up, Average, Paeth 등의 필터 중 하나를 선택할 수 있으며, 이 필터들이 각각 다른 방식으로 데이터를 변환한다.
    • None: 필터링을 하지 않는 방식.
    • Sub: 현재 픽셀 값에서 왼쪽 픽셀 값을 뺀 차이를 저장.
    • Up: 현재 픽셀 값에서 위쪽 픽셀 값을 뺀 차이를 저장.
    • Average: 현재 픽셀 값과 왼쪽, 위쪽 픽셀의 평균 값을 이용해 차이를 계산.
    • Paeth: 왼쪽, 위쪽, 대각선 위 픽셀 값을 고려해 가장 적합한 예측값을 선택하고 차이를 계산.

2. DEFLATE 압축

PNG는 필터링된 데이터를 DEFLATE 알고리즘을 사용해 압축한다. DEFLATE는 LZ77 알고리즘과 허프만 코딩을 결합한 압축 기법이다.

  • LZ77 알고리즘: 중복된 문자열을 탐지해 참조하는 방식으로 데이터의 크기를 줄인다. 슬라이딩 윈도우 기법을 사용해 데이터의 반복을 찾아내고 압축한다.
  • 허프만 코딩: 데이터의 빈도에 따라 가변 길이 코드를 생성해 더 자주 나타나는 데이터를 짧게 인코딩한다.

이 과정을 통해 필터링된 이미지 데이터는 효율적으로 압축되어 PNG 파일로 저장된다. 이 압축 방식은 무손실이라 이미지의 품질이 전혀 손상되지 않는다.


GIF 압축 원리

1. 색상 제한

GIF는 팔레트 기반의 이미지 포맷으로, 한 이미지당 최대 256개의 색상만 사용할 수 있다. 이는 GIF가 압축 효율을 높이기 위해 색상 수를 제한하는 방식이다. 팔레트에 있는 색상은 8비트(1바이트)로 인코딩되며, 색상을 줄임으로써 압축을 가능하게 한다.

2. Lempel-Ziv-Welch (LZW) 알고리즘

GIF는 LZW 압축 알고리즘을 사용해 이미지를 압축한다. LZW는 무손실 압축 알고리즘으로, 데이터를 중복 제거하여 압축률을 높인다.

  • LZW 알고리즘 작동 방식:
    • 사전 생성: 처음에는 단일 문자(픽셀)의 코드로 시작해 사전을 생성한다.
    • 데이터 인코딩: 현재 픽셀 시퀀스를 사전에서 찾고, 찾은 코드로 대체한다. 새로운 시퀀스가 발견되면 사전에 추가된다.
    • 중복 제거: 중복된 부분을 사전의 코드로 대체하여 데이터 크기를 줄인다.

3. 무손실 압축

GIF는 무손실 압축 방식으로 이미지의 품질이 손상되지 않는다. 색상 수와 LZW 알고리즘 덕분에 GIF는 단순한 그래픽이나 애니메이션을 압축할 때 효율적인 방식이다. 다만, 256색 제한으로 인해 사진과 같은 고해상도 이미지는 품질이 떨어지며, JPEG나 PNG보다 적합하지 않다.