아이폰 사진 한 장은 3~6 MB. 데스크톱 스크린샷은 2~4 MB. "화질 아까워서 PNG로 저장한" 파일은 흔히 8 MB예요. 여기에 포트폴리오, 블로그, 이메일 스레드를 곱하면, 500 KB짜리와 구별도 안 되는 사진 때문에 수백 메가바이트를 보내고 있는 셈이죠.
이미지 압축이 그 간극을 메워요. Zebra는 최신 이미지 코덱을 WebAssembly로 브라우저에서 직접 돌려요. 파일은 기기 밖으로 나가지 않아요. 대부분의 사진이 눈에 보이는 화질 손실 없이 60~90% 작아져요.
3단계
- 이미지 압축기를 여세요.
- JPG, PNG, WebP를 끌어다 놓으세요 (최대 25 MB). 여러 장을 한꺼번에 놓으면 일괄 압축이 돼요 — 로그인하면 최대 5개, 프리미엄은 최대 15개까지.
- Light, Medium, Strong 중 하나를 고르고 압축을 누른 뒤 다운로드하세요. 한 장이면 바로 내려받고, 여러 장이면 ZIP 하나로 나와요.
400만 화소 아이폰 사진은 맥에서 약 2초, 1200만 화소는 4~6초 걸려요. 모바일 사파리는 몇 초가 더 붙고요. 15장 배치는 파일당 비슷한 시간으로 순차 처리돼요 — 업로드가 없으니 속도는 인터넷이 아니라 당신의 CPU에 달려 있어요. 문서를 줄여야 한다면 PDF 압축 가이드가 같은 방식을 설명해요.
이미지가 커지는 이유
- 해상도. 4032×3024 아이폰 JPEG는 1220만 화소예요. 압축 안 한 상태로 픽셀당 4바이트만 잡아도 50 MB짜리 원시 데이터죠. JPEG가 이걸 약 4 MB로 압축하지만, 더 똑똑한 인코더와 살짝 낮은 품질 설정으로 재인코딩하면 여기서 60%를 더 깎을 수 있어요.
- 포맷 선택. PNG는 모든 픽셀을 무손실로 저장해요. 또렷한 텍스트가 있는 스크린샷이나 투명도가 있는 아이콘엔 맞는 선택이에요. 하지만 사진엔 틀린 선택이죠 — JPEG라면 기꺼이 버릴 노이즈를 인코딩하는 데 4 MB를 쓰고 있는 거예요.
- 인코더 품질. 브라우저 내장 JPEG 인코더는 보수적이에요. Zebra는 트렐리스 양자화와 프로그레시브 스캔으로 튜닝한 JPEG 인코더를 써서, 같은 품질에서 10~20% 작은 파일을 만들어요. 같은 사진, 더 작은 파일.
- EXIF 메타데이터. GPS 좌표, 카메라 모델, 렌즈, 전체 편집 이력. 가끔 쓸모 있지만, 필요 없는 수백 KB일 때가 많아요. Zebra는 재인코딩할 때 대부분의 EXIF를 제거해요.
Zebra가 쓰는 코덱 세 가지
Zebra는 파일 형식과 내용에 맞춰 알맞은 코덱을 골라요.
- mozjpeg — JPEG 입력과, 알파 없는 PNG 자동 변환용. 트렐리스 양자화로 브라우저 내장 인코더와 포토샵의 "웹용으로 저장"을 같은 품질에서 10~20% 꾸준히 앞서요.
- oxipng — 진짜 투명도가 있는 PNG용. 여러 필터 패스를 쓰는 무손실 DEFLATE 재최적화. 1 MB짜리 PNG 아이콘 세트는 보통 700~800 KB로 떨어져요 — 데이터는 비트 단위로 그대로, 그냥 더 촘촘하게 담겼을 뿐이에요.
- libwebp — WebP 입력용. WebP는 이미 효율적이지만, 원하는 품질 목표로 재인코딩하면 여기서 20~40%를 더 줄여요.
세 코덱 모두 jSquash 프로젝트를 통해 WebAssembly로 컴파일돼 있어요. 전부 브라우저 탭 안에서 돌아가요 — 서버도, 업로드도, 텔레메트리도 없어요.
자동 모드: 안전할 때 PNG → JPEG
대부분의 "PNG" 파일은 사실 PNG일 필요가 없어요. 사람들은 "무손실 = 화질 좋음"이라고 생각하며 사진을 PNG로 저장했다가, 400 KB짜리 JPEG로도 똑같아 보일 걸 4 MB짜리 파일로 갖게 되죠.
Zebra는 당신이 놓는 모든 PNG를 검사해요. 알파 채널이 완전히 불투명하면(투명도 없음) 그 파일을 JPEG로 재인코딩해요. 사진 PNG에서는 지각적 차이 없이 5~10배 크기 이득이 나요. PNG에 진짜 투명도가 있으면(UI 목업, 아이콘, 스티커) PNG로 유지돼요 — Zebra가 알파를 건드리지 않고 무손실로 재최적화하고요.
고를 필요 없어요. 파일을 놓으면 저희가 맞는 경로를 골라요.
Light, Medium, Strong
| 프리셋 | JPEG q | WebP q | PNG 최적화 레벨 | 일반적 절감 |
|---|---|---|---|---|
| Light | 88 | 88 | 2 | 30~50% |
| Medium | 78 | 78 | 4 | 60~80% |
| Strong | 65 | 65 | 6 | 80~95% |
Light(품질 88)는 어떤 일반 화면에서든 원본과 시각적으로 동일해요. 인쇄하거나 확대해서 볼 사진, 또는 메타데이터만 벗기고 인코딩을 조이고 싶을 때 쓰세요.
Medium(품질 78)이 기본값이에요. 결과물은 A4로 인쇄할 만큼 선명하고, 레티나나 모바일에서는 구분이 안 돼요. 특별한 이유가 없다면 이걸 고르세요.
Strong(품질 65)은 200% 이상 확대하면 평평한 영역(하늘, 벽)에 눈에 보이는 아티팩트가 생기지만, 확대해서 픽셀을 뜯어보는 것보다 용량이 중요한 이메일·웹 공유·채팅엔 완벽해요.
아무것도 기기를 떠나지 않는 이유
대부분의 무료 이미지 압축기 — TinyPNG, Compressor.io, ImageOptim Online — 는 당신의 파일을 서버로 업로드해요. 그 방식엔 실제 비용이 따라요.
- 당신의 이미지가 남의 디스크에 올라가요. "24시간 뒤 삭제" 약속이 있어도 보존 구간은 존재해요. 신분증 사진, 비공개 대화 스크린샷, 대외비 자료라면 그 구간이 문제예요.
- 대역폭을 두 배로 써요. 서버로 올리고, 서버에서 내려받고. 모바일에서는 이게 느린 부분이에요.
- EXIF 메타데이터가 파일과 함께 이동해요. 폰의 GPS 좌표가 JPEG 헤더에 박혀 있어요. 업로드하면 서버도 그걸 읽어요.
Zebra는 최신 이미지 코덱을 WebAssembly 모듈로 브라우저 탭 안에서 돌려요. 이미지는 로컬에서 디코딩되고, 재인코딩되고, 다시 묶여요. 네트워크 호출 없음. 보존 구간 없음. 페이지를 불러온 뒤 오프라인이 돼도 압축은 계속 돼요.
JPG vs PNG vs WebP — 무엇으로 저장할까
압축 후에 어떤 포맷으로 저장해야 하는지, 짧은 결정 트리예요.
- 실제 장면 사진, 투명도 불필요? JPEG. 품질 78~85면 인쇄 빼고는 전부 충분해요.
- 투명도가 있는 사진(드묾 — 보통 컷아웃)? 상대방이 2022년 이후 브라우저를 쓴다면 WebP. 안전한 대안은 PNG.
- UI 스크린샷, 아이콘, 로고, 또렷한 텍스트가 있는 것? PNG. 텍스트 주변의 JPEG 링잉 아티팩트는 보기 싫고 고칠 수도 없어요.
- 애니메이션? WebP(아주 오래된 호환성엔 GIF). 애니메이션 PNG도 되지만 지원이 들쭉날쭉해요.
- 최신 웹, 브라우저 지원 완전? 전부 WebP. Zebra가 추가하면 AVIF.
압축하지 말아야 할 때
- 편집용 마스터 파일. 원본은 최고 품질로 두세요. 복사본을 압축하세요. SNS 비율에 맞추는 게 유일한 목적이라면, 화질을 낮추기보다 사진 자르기가 더 똑똑한 첫걸음일 때가 많아요.
- 이미 아주 작은 파일. 200 KB 미만은 보통 할 가치가 없어요 — 재인코딩 오버헤드가 절감분보다 클 수 있어요.
- 또렷한 텍스트가 있는 스크린샷. JPEG 링잉 아티팩트가 텍스트를 망쳐요. PNG로 두세요 — Zebra가 무손실로 재최적화해요(투명도 있는 스크린샷은 자동으로 이렇게 처리돼요).
- A3 이상으로 인쇄할 것. Light로 두거나 압축을 건너뛰세요.
Zebra는 재인코딩이 파일을 더 키우는 경우(이미 최적화된 PNG, 낮은 품질의 작은 JPEG)도 감지해서, 줄이는 척하는 대신 원본을 그대로 돌려줘요.