사진 용량, 품질보다 크기를 먼저 줄여야 하는 이유 — 직접 재 봤다
휴대폰으로 찍은 사진은 한 장에 4MB를 넘기 쉽다. 이걸 가볍게 만들 때 많이들 품질부터 낮춘다. 품질 슬라이더가 눈에 먼저 띄기 때문이다. 직접 재 보니 순서가 반대였다. 크기를 먼저 줄이는 쪽이 훨씬 듣는다.
어떻게 쟀나
휴대폰으로 찍은 사진 20장을 썼다. 원본은 중앙값 기준 1,830만 화소, 4,366KB다. 같은 사진을 조건만 바꿔 JPG로 저장하고 파일 크기를 쟀다. 아래 숫자는 모두 20장의 중앙값이다.
크기만 줄이면
품질은 84로 두고 사진의 긴 쪽만 바꿨다.
| 긴 쪽 | 용량 |
|---|---|
| 4032픽셀 (원본 수준) | 1,742KB |
| 2400픽셀 | 703KB |
| 1600픽셀 | 347KB |
| 1200픽셀 | 208KB |
| 800픽셀 | 95KB |
긴 쪽을 4032에서 1600으로 줄이면 용량이 5분의 1이 된다. 픽셀 수가 가로·세로 양쪽으로 줄어서다. 긴 쪽을 절반쯤 줄이면 전체 픽셀은 4분의 1 안팎이 된다.
품질만 낮추면
이번엔 원본 크기(긴 쪽 4032)를 그대로 두고 품질만 낮췄다.
| 품질 | 용량 |
|---|---|
| 84 | 1,742KB |
| 60 | 942KB |
| 40 | 699KB |
품질을 40까지 내려도 699KB다. 크기를 1600으로 줄이고 품질 84를 유지한 347KB의 두 배다.
품질 40은 싸게 먹히지 않는다
품질을 낮추면 화질이 얼마나 깎이는지도 쟀다. 긴 쪽 1600 사진을 품질별로 저장하고, 원본과 얼마나 같은지를 PSNR로 봤다. 높을수록 원본에 가깝다.
| 품질 | 용량 | PSNR |
|---|---|---|
| 95 | 659KB | 42.8dB |
| 90 | 455KB | 39.7dB |
| 84 | 347KB | 37.8dB |
| 75 | 260KB | 36.1dB |
| 60 | 193KB | 34.4dB |
| 40 | 143KB | 32.9dB |
품질을 84에서 40으로 내리면 용량은 347KB에서 143KB로 줄지만 PSNR은 37.8에서 32.9로 떨어진다. 원본 크기에서 품질 40을 고르면, 크기를 줄였을 때보다 무거운 파일을 더 나쁜 화질로 받는 셈이다.
올릴 곳의 한도에서 거꾸로 고르기
중앙값만 보고 크기를 정하면 몇 장은 한도를 넘는다. 같은 크기, 같은 품질이라도 사진마다 용량이 세 배 가까이 차이 났다. 긴 쪽 1600에서 가장 가벼운 사진은 137KB, 가장 무거운 사진은 402KB였다. 그래서 20장 가운데 한도 안에 든 장수를 같이 셌다. 품질은 모두 84다.
| 긴 쪽 | 중앙값 | 가장 큰 것 | 500KB 이하 | 1MB 이하 | 2MB 이하 |
|---|---|---|---|---|---|
| 4032 | 1,742KB | 2,138KB | 0장 | 2장 | 19장 |
| 3000 | 1,033KB | 1,252KB | 1장 | 8장 | 20장 |
| 2400 | 703KB | 839KB | 4장 | 20장 | 20장 |
| 2000 | 510KB | 606KB | 9장 | 20장 | 20장 |
| 1600 | 347KB | 402KB | 20장 | 20장 | 20장 |
| 1200 | 208KB | 238KB | 20장 | 20장 | 20장 |
한도가 500KB면 긴 쪽 1600까지는 20장이 모두 들어갔다. 2000으로 올리면 절반이 넘는 11장이 걸렸다. 한도가 1MB면 2400까지 모두 들어갔고, 3000에서는 8장만 들어갔다. 원본 수준인 4032는 2MB 한도에서도 한 장이 넘었다.
올릴 곳이 한도를 알려 주면 이 표에서 20장이 다 들어간 가장 큰 줄을 고르면 된다. 가장 큰 사진이 들어가면 나머지도 들어간다.
다시 저장할수록 나빠지나
사진을 여러 번 고쳐 저장하면 화질이 계속 깎인다는 말이 있다. 긴 쪽 1600 사진을 품질 84로 저장하고, 그 파일을 열어 다시 품질 84로 저장하기를 열 번 되풀이했다.
| 저장 횟수 | 용량 | PSNR |
|---|---|---|
| 1번 | 347KB | 37.81dB |
| 2번 | 347KB | 37.72dB |
| 5번 | 347KB | 37.53dB |
| 10번 | 347KB | 37.42dB |
같은 품질로 되풀이하면 열 번을 저장해도 0.39dB 떨어지는 데 그쳤다. 문제는 품질을 바꿔 가며 저장할 때다. 84로 저장한 파일을 75로 다시 저장하면 PSNR이 34.66dB였다. 원본에서 바로 75로 저장한 36.1dB보다 1.4dB 낮다. 그 파일을 다시 84로 올려 저장하면 용량은 399KB로 처음보다 커지고, PSNR은 32.94dB로 더 떨어졌다. 품질 40으로 한 번 저장한 것(32.9dB)과 비슷한 화질을 더 무거운 파일로 받는 셈이다.
한 번 낮춘 품질은 숫자를 올려도 돌아오지 않는다. 품질을 바꿀 때는 처음 받은 원본에서 다시 시작하는 편이 낫다.
사진을 PNG로 저장하면
PNG는 화질을 잃지 않는 형식이라 사진도 PNG로 저장하는 경우가 있다. 긴 쪽 1600 사진 20장을 PNG로 저장하면 중앙값이 2,371KB였다. 가장 작은 것도 1,440KB다. 같은 사진을 JPG 품질 84로 저장한 것보다 사진별로 7.1배(중앙값) 무거웠다. 사진은 JPG나 WebP로 저장하고, PNG는 글자나 단색 면이 많은 그림에 쓴다.
그래서 순서는 이렇다
1. 올릴 곳에서 보일 크기로 먼저 줄인다. 화면에 400픽셀로 보일 사진을 4000픽셀로 올릴 이유가 없다. 2. 그래도 용량이 넘으면 품질을 조금씩 낮춘다. 84에서 75로 내리면 용량은 25% 줄고 PSNR은 1.7dB 떨어진다. 40까지 내리면 용량은 59% 줄지만 PSNR은 4.9dB 떨어진다. 3. 받는 곳이 허락하면 WebP로 저장한다. 같은 조건에서 더 작다. WebP와 JPG를 같은 사진으로 비교한 글에 숫자를 따로 정리했다. 4. 다시 고칠 일이 생기면 저장본이 아니라 원본을 연다. 품질을 내렸다 올렸다 하며 덧저장하면 용량은 오히려 커지고 화질만 깎인다.
이 측정의 한계
표본은 휴대폰 사진 20장이고, 원본 크기는 4032×3024와 5712×4284 두 가지뿐이다. 다른 크기로 찍는 휴대폰은 숫자가 달라질 수 있다. 축소는 LANCZOS 방식으로 했다. 프로그램마다 축소 방식과 JPG 인코더가 달라서 같은 품질 숫자라도 용량이 조금씩 다르게 나온다. PSNR은 원본과 픽셀 값이 얼마나 같은지를 재는 숫자다. 사람 눈에 보이는 차이와 꼭 같지는 않다.
이어서 보기
- 이미지 용량 줄이기 도구 — 긴 쪽 1600으로 먼저 줄이고, 목표 용량을 넘을 때만 품질을 낮춘다
- WebP와 JPG, 같은 사진으로 비교하면