JPG — Lossy Compression | PNG — Lossless Compression
사람 눈은 밝기(Y)에 민감하고 색상(Cb, Cr)에 덜 민감합니다. JPG는 이 특성을 이용해 색상 채널을 따로 처리합니다.
Cb·Cr 채널의 해상도를 가로·세로 절반으로 줄입니다. 픽셀 4개당 색상 정보 1개만 저장하므로 데이터가 크게 줄고, 사람 눈에는 거의 차이가 없습니다.
이미지를 8×8 픽셀 블록으로 나눈 뒤, 각 블록을 공간 영역에서 주파수 영역으로 변환합니다. 저주파(전체적인 밝기/색)는 앞쪽에, 고주파(세밀한 경계)는 뒤쪽에 배치됩니다.
DCT 계수들을 미리 정해진 "양자화 테이블"로 나누고 반올림합니다. 고주파 성분일수록 큰 값으로 나누므로 0으로 수렴하는 계수가 많아집니다. 품질(quality) 설정이 바로 이 테이블의 강도를 조절하는 것입니다. 재압축할수록 품질이 열화되는 이유가 여기 있습니다.
자주 등장하는 값에 짧은 비트열을, 드문 값에 긴 비트열을 할당해 최종적으로 비트 수를 줄입니다.
각 픽셀을 절댓값 대신 주변 픽셀과의 차이로 표현합니다. 필터 종류는 5가지(None, Sub, Up, Average, Paeth)이며, 인코더가 각 줄마다 가장 효율적인 필터를 선택합니다. 차이값은 숫자가 작아 이후 압축이 잘 됩니다.
LZ77: 이전에 나온 패턴이 반복될 경우 "N바이트 전으로 돌아가서 M바이트 복사"라는 참조로 대체합니다. 단색 배경처럼 반복 패턴이 많을수록 효율이 극대화됩니다.
허프만 코딩: JPG와 동일하게 자주 나오는 값에 짧은 코드를 부여합니다.
이 과정에서 데이터 손실이 전혀 없으므로 압축을 몇 번 해도 품질이 그대로입니다.
| 상황 | 권장 포맷 | 이유 |
|---|---|---|
| 사진, 자연 이미지 | JPG | 색상 변이가 많아 손실이 눈에 띄지 않음 |
| 로고, 텍스트, 아이콘 | PNG | 선명한 경계 보존, 투명도 지원 |
| 스크린샷 (UI) | PNG | 글자·픽셀 경계 선명하게 유지 |
| 웹 사진 (용량 중요) | JPG q=75~85 | 파일 크기 대비 화질 최적 |
| 투명 배경 필요 | PNG | JPG는 투명도 미지원 |