Chapter 10

해상도와 압축

휴대폰 화면에서 선명하던 사진을 크게 인쇄했더니 가장자리가 계단처럼 깨졌다. 반대로 카메라에서 바로 꺼낸 사진을 웹사이트에 올렸더니 한 장이 10 MB가 넘어 페이지가 한참 뒤에야 열렸다. 사진 파일에는 두 가지 숫자가 붙어 다닌다. 화소가 몇 개인가, 그리고 그 화소들을 몇 바이트로 적었는가. 이 장은 첫째 숫자가 인쇄 크기와 어떻게 만나는지, 둘째 숫자를 줄이는 JPEG·PNG·WebP가 무엇을 버리고 무엇을 지키는지 직접 들여다본다. 끝에는 용도마다 내보낼 파일을 정한다.

화소 수와 인쇄 크기

디지털 사진은 작은 색 칸의 격자다. 칸 하나가 화소(Pixel)이고(8장), 가로·세로 화소 수를 그 사진의 해상도(Resolution)라고 흔히 부른다. 6000×4000 화소 사진, 1600×1122 화소 사진처럼 쓴다. 이 숫자에는 길이 단위가 없다. 6000화소짜리 사진은 손톱만 하게도, 벽만 하게도 인쇄할 수 있다. 크기를 정하는 순간 비로소 "1인치에 화소가 몇 개 들어가는가"가 정해진다. 이것이 ppi(Pixels per inch)다.

$$\text{ppi} = \frac{\text{화소 수} \times 25.4}{\text{인쇄 길이(mm)}}$$
화소 수를 인치 단위의 인쇄 길이로 나눈 값이고, 1인치는 25.4 mm다. 예: 가로 1600화소를 A5 종이 폭(148 mm)에 꽉 차게 인쇄하면 1600 × 25.4 ÷ 148 ≈ 275 ppi. 거꾸로, 300 ppi로 148 mm를 채우려면 148 ÷ 25.4 × 300 ≈ 1748화소가 필요하다.

비슷한 말인 dpi(Dots per inch)는 원래 프린터가 1인치에 찍는 잉크 점의 수다. 잉크젯이나 인쇄기는 화소 하나의 색을 여러 개의 작은 점(망점)으로 섞어 표현하므로, 프린터의 dpi는 사진의 ppi보다 훨씬 크다(1200 dpi, 2400 dpi 등). 일상에서는 둘을 섞어 쓰는 일이 많고 인쇄소도 "300 dpi로 주세요"라고 말하곤 하는데, 그때 뜻하는 것은 대개 사진 파일의 300 ppi다.

아래 시뮬레이터는 도록 한 쪽(A5, 148×210 mm에 사방 3 mm 재단 여유)이다. 사진 틀의 오른쪽 아래 손잡이를 끌어 인쇄 크기를 바꾸고, 슬라이더로 사진의 가로 화소 수를 바꾼다. 오른쪽 돋보기는 인쇄물 위 10 mm 정사각형 안에 화소가 실제로 몇 개 들어가는지 크게 보여 준다.

SIMULATOR

화소 수와 인쇄 크기, 그리고 ppi

사진 틀의 오른쪽 아래 손잡이를 끈다
인쇄 크기—
ppi—
300 ppi에 필요한 가로 화소—
해볼 것: ① 가로 1600화소로 두고 "작품면(118 mm)"을 고른다. 344 ppi로 넉넉하다. "재단 여유까지 꽉"(154 mm)으로 바꾸면 264 ppi로 내려간다. ② 화소 수를 600까지 내린다. 돋보기 안에서 칸이 보이기 시작하고, 100 ppi 아래로 가면 수채화의 붓 자국 대신 네모난 계단이 보인다. ③ 화소를 6000으로 올리고 틀을 작게 줄인다. 1000 ppi를 넘겨도 돋보기 속 모습은 300 ppi 근처와 거의 같다. 눈이 구별할 수 있는 한계를 넘은 화소는 용량만 차지한다. (돋보기는 10 mm 안의 화소를 확대해 보여 주는 그림이며, 실제 인쇄의 망점이나 종이 번짐은 넣지 않았다.)
"웹용은 72 dpi"라는 오래된 말 사진 파일에는 "이 사진을 몇 ppi로 인쇄하라"는 메모 값이 들어 있다. 그런데 화면은 이 값을 읽지 않는다. 웹페이지와 SNS는 화소 수만 보고 사진을 배치하므로, 같은 1600×1122 사진은 메모가 72든 300이든 화면에서 똑같이 보이고 용량도 똑같다. "웹용은 72 dpi로 저장하라"는 말은 오래전 일부 운영체제의 화면 기준에서 생긴 관습이고, 실제로 화면 크기와 용량을 정하는 것은 화소 수다. 반대로 인쇄소에 보낼 때는 메모 값을 실제 인쇄 크기에 맞게(예: 300) 적어 두면 서로 혼동이 줄어든다.

왜 300 ppi인가

인쇄용 사진은 300 ppi로 준비하라는 관례가 있다. 이 숫자는 어디서 왔을까. 출발점은 사람 눈의 해상력이다. 시력표에서 "정상 시력(1.0)"은 대략 1분각(1/60도) 크기의 틈을 알아보는 능력으로 정의된다. 책을 보는 거리를 30 cm로 두면 1분각은 종이 위에서 약 0.087 mm이고, 1인치에 그런 칸이 약 290개 들어간다. 300 ppi는 이 계산을 반올림한 어림값이다.

$$\text{필요한 ppi} \approx \frac{25.4}{d \cdot \tan(1/60^\circ)}$$
\(d\): 보는 거리(mm). 25 cm에서 약 349, 30 cm에서 약 291, 50 cm에서 약 175, 1 m에서 약 87, 3 m에서 약 29 ppi. 1분각은 시력표의 기준일 뿐 사람마다, 대비와 무늬에 따라 다르다. 아주 가는 선의 어긋남은 이보다 훨씬 작게도 알아본다.
0100200300 25 cm 34930 cm 291 · 책, 도록50 cm 175 · 벽의 작은 액자1 m 87 · 포스터3 m 29 0.250.511.523 m 보는 거리 (가로축은 고르지 않은 눈금) 필요한 ppi
그림 1. 보는 거리와 필요한 ppi. 1분각 기준으로 계산한 값이다. 손에 들고 보는 도록은 30 cm 안팎이라 300 ppi 근처가 필요하지만, 멀리서 보는 포스터나 현수막은 그보다 훨씬 낮아도 화소가 보이지 않는다. 그래서 300은 "언제나"의 숫자가 아니라 "손에 드는 인쇄물"의 숫자다.

실무에서는 300 ppi를 목표로 하되, 사진이 조금 모자라면 240~250 ppi까지는 대부분의 인쇄물에서 차이를 알아보기 어렵다고 보는 경우가 많다. 반대로 300을 훨씬 넘게 준비해도 인쇄물은 더 좋아지지 않는다. 인쇄기의 망점과 종이의 번짐이 그보다 먼저 한계를 정하기 때문이다. 인쇄소마다 권하는 값이 있으니 최종 기준은 그 인쇄소의 안내를 따른다.

리샘플링: 줄이기와 키우기

원하는 화소 수가 사진과 다르면 화소를 새로 계산해야 한다. 이것이 리샘플링(Resampling)이다. 줄일 때는 여러 화소를 하나로 합치고, 키울 때는 화소 사이를 메울 값을 지어낸다. 어떤 규칙으로 합치고 지어내느냐에 따라 결과가 크게 다르다. 가장 단순한 최근접 이웃(Nearest neighbor)은 새 화소 자리에서 가장 가까운 원래 화소 하나를 그대로 가져온다. 쌍선형(Bilinear)은 가까운 네 화소를 거리에 따라 섞고, 바이큐빅(Bicubic)은 열여섯 화소를 부드러운 3차 곡선의 무게로 섞는다.

줄이기에서 생기는 문제는 앨리어싱(Aliasing)이다. 원래 사진에 촘촘한 줄무늬가 있는데 새 격자가 그보다 성기면, 격자가 줄무늬를 띄엄띄엄 집어 원래 없던 굵은 물결무늬가 나타난다. 이 가짜 무늬를 무아레(Moiré)라고 한다. 아래 동판화는 가는 평행선이 가득해서 이 문제를 시험하기에 알맞다.

알브레히트 뒤러의 동판화 「서재의 성 히에로니무스」. 둥근 유리창이 달린 창으로 빛이 들어오는 나무 천장의 방에서 후광이 비치는 노학자가 책상에 엎드려 글을 쓰고, 앞쪽 바닥에는 사자와 개가 잠들어 있다. 천장 판자와 벽, 바닥이 모두 가는 평행선과 교차선으로 새겨져 있다.
그림 2. 알브레히트 뒤러, 「서재의 성 히에로니무스」, 1514. 동판화는 회색을 칠하지 않고 가는 선의 간격과 굵기로 만든다. 천장 판자의 결과 벽의 그늘이 모두 평행선 다발이다. 이런 그림을 스캔하거나 사진으로 찍어 화면에 작게 띄우면, 선의 간격과 화소의 간격이 맞부딪혀 물결무늬가 생기기 쉽다. 이 그림 파일 자체도 원본을 줄인 것이라, 화면 배율에 따라 천장에 옅은 물결이 보일 수 있다.메트로폴리탄 미술관 소장(Fletcher Fund, 1919), 동판화. 공공 도메인(The Met Open Access, CC0). 소장처 작품 페이지 · 크레딧
SIMULATOR

리샘플링: 무아레와 흐림

가운데 경계선을 끈다(왼쪽이 원본)
결과 화소—
화소 수 비율—
원본과의 차이(PSNR)—
해볼 것: ① "줄이기", 최근접, 배율 31%. 오른쪽 천장 판자에 원래 없던 굵은 물결과 끊긴 선이 나타난다. 배율을 천천히 움직이면 물결의 방향과 간격이 출렁인다. ② 같은 배율에서 "바이큐빅(필터 넓힘)"을 고른다. 줄이기 전에 가는 선을 회색으로 뭉쳐 주므로 물결이 사라지고 차분한 회색 면이 된다. 쌍선형은 그 중간이다. ③ "줄였다가 다시 키우기"로 바꾼다. 어떤 방식으로 키워도 사라진 선은 돌아오지 않는다. 최근접은 계단을, 바이큐빅은 흐림을 남길 뿐이다. 배율을 내릴수록 PSNR이 떨어진다. (최근접·쌍선형은 줄일 때 필터를 넓히지 않는 단순 구현, 바이큐빅은 Keys(1981)의 a = −0.5 커널을 줄이는 배율만큼 넓혀 썼다. 화면 표시는 결과 화소를 최근접으로 크게 그렸다. PSNR은 다시 키운 결과와 원본의 차이로, 클수록 비슷하다.)

교훈은 둘이다. 줄일 때는 반드시 "필터를 넓히는" 방식, 곧 줄이는 만큼 넓은 범위를 평균하는 방식을 쓴다. 대부분의 사진 프로그램은 내보내기에서 이렇게 하지만, 브라우저나 간단한 도구의 빠른 축소는 그렇지 않을 때가 있다. 그리고 키우기는 정보를 만들지 못한다. 요즘에는 학습된 모형으로 그럴듯한 세부를 "그려 넣는" 확대 도구도 있지만, 그 세부는 원래 장면에서 온 것이 아니라 모형이 추측한 것이다. 작품 사진이나 기록 사진에서는 그렇게 생긴 세부를 실물의 기록으로 쓰면 안 된다. 필요한 화소는 찍을 때 확보한다.

원본은 크게, 내보내기는 그때그때 사진가와 디자이너는 대개 원본(RAW나 16비트 TIFF)을 손대지 않은 채 두고, 용도가 생길 때마다 그 원본에서 필요한 크기로 새로 내보낸다. 웹용으로 줄인 파일을 다시 키워 인쇄용으로 쓰거나, 인쇄용 파일을 줄여 웹용으로 만든 뒤 또 다른 크기로 줄이는 식의 "사본의 사본"은 리샘플링과 압축 손실이 겹겹이 쌓인다. 파일 이름에 용도와 크기를 넣어 두면(예: 창가의책_web_1600.webp, 창가의책_print_A5full.tif) 어느 것이 원본에서 바로 나온 것인지 헷갈리지 않는다.

JPEG는 무엇을 버리는가

1600×1122 사진 한 장을 그대로 적으면 화소마다 빨강·초록·파랑 1바이트씩, 약 5.4 MB다. 같은 사진을 JPEG로 저장하면 수백 KB, 열 분의 일 아래로 준다. JPEG는 사진을 손톱만큼도 흐리게 하지 않고 줄이는 것이 아니라, 사람 눈이 잘 알아채지 못하는 정보를 골라 버린다. 이렇게 원본으로 완전히 되돌릴 수 없는 압축을 손실 압축(Lossy compression)이라고 한다. JPEG 표준(ITU-T T.81, 1992)이 정한 단계는 다음과 같다.

① 색 분리Y·Cb·Cr ② 색차 줄이기4:2:0 ③ 8×8 DCT무늬 64개 ④ 양자화나누고 반올림 ⑤ 부호화무손실 밝기(Y)는 그대로, 두 색차 신호는 가로·세로 절반 해상도로. 눈은 밝기의 세부에 예민하고 색의 세부에는 둔하다(ColorBook 6장). DCT: 8×8 블록을 "평평함 + 점점 촘촘한 무늬 63개"의 합으로 다시 적는다. 양자화: 촘촘한 무늬일수록 큰 수로 나누고 반올림 → 대부분 0이 된다. 부호화: 0이 줄줄이 이어진 숫자열을 짧게 적는다(되돌릴 수 있다). 붉은 칸(②, ④)에서만 정보가 사라진다. 품질 값은 ④의 나눗셈 크기를 정한다.
그림 3. JPEG 압축의 단계. 실제 인코더는 여기에 여러 선택(색차를 줄이지 않는 4:4:4, 점진적 저장, 최적화된 허프만 표 등)을 더한다. 품질 값과 표의 관계는 표준이 정하지 않았고, 아래 시뮬레이터는 널리 쓰이는 독립 JPEG 그룹(IJG) 라이브러리의 방식을 따랐다.

핵심은 ③과 ④다. DCT(Discrete cosine transform, 이산 코사인 변환)는 8×8 화소 블록을, 완전히 평평한 무늬 하나(평균 밝기)와 가로·세로로 점점 촘촘해지는 물결무늬 63개를 얼마씩 섞으면 되는지로 바꿔 적는다. 64개 화소가 64개 "섞는 양"(계수)으로 바뀔 뿐, 이 단계에서는 아무것도 버리지 않는다. 그런데 사진의 블록은 대개 부드러워서 평평한 무늬와 성긴 무늬 몇 개에 거의 모든 양이 몰리고, 촘촘한 무늬의 양은 작다. ④ 양자화(Quantization)는 각 계수를 정해진 수로 나누고 반올림한다. 촘촘한 무늬일수록 큰 수로 나누므로 작은 계수들이 대부분 0이 된다. 0이 많을수록 ⑤에서 짧게 적힌다. 아래에서 블록 하나를 직접 들여다본다.

SIMULATOR

8×8 블록 하나: DCT와 양자화

왼쪽 그림 위의 네모를 끈다
0이 아닌 계수—
표 배율(IJG)—
블록의 평균 오차—
해볼 것: ① "하늘"을 고른다. 품질 50에서 64개 계수 중 살아남는 것은 평균 밝기 하나뿐이고, 품질을 10까지 내려도 복원 블록의 평균 오차는 1.2에 그친다. 부드러운 블록은 숫자 하나로 충분하다. ② "물보라"로 바꾼다. 품질 50에서 34개가 살아남고, 품질 10에서는 13개만 남아 평균 오차가 28로 커진다. 복원 블록에서 물보라의 점들이 뭉개진다. ③ "배의 가장자리"에서 품질을 10까지 내린다. 경계 양쪽의 평평하던 면에 물결 같은 얼룩이 번진다. 날카로운 경계를 만들던 촘촘한 무늬가 잘려 나가면서 생기는 이 얼룩을 링잉(모스키토 노이즈)이라고 한다. (밝기 Y 채널 하나만 계산했다. 양자화 표는 T.81 부록 K의 밝기 표, 품질에 따른 배율은 IJG libjpeg의 공식이다.)

블록마다 따로 계산한다는 사실이 JPEG의 대표적인 흔적을 만든다. 품질을 많이 낮추면 블록 하나가 평균 밝기 하나로만 남아 8×8 타일이 드러나고(블록 현상), 이웃 블록끼리 서로 사정을 모르니 경계에서 밝기가 툭 끊긴다. 날카로운 경계 둘레에는 링잉이, 색차를 절반으로 줄인 탓에 빨간 글자 둘레에는 색이 번진 테두리가 생긴다. 이 흔적들은 부드러운 사진에서는 잘 숨고, 글자·선화·평평한 색면에서는 쉽게 드러난다.

왜 하필 코사인이고 8×8인가 DCT는 Ahmed, Natarajan, Rao가 1974년에 발표한 변환으로, 이웃한 화소끼리 값이 비슷한 신호(대부분의 사진)에서 에너지를 소수의 계수에 몰아 주는 성질이 좋다. 8×8이라는 크기는 표준을 만들던 1980년대 말의 계산 능력과 압축 효율 사이의 타협이다. 블록이 크면 부드러운 하늘을 더 효율적으로 적지만 계산이 무겁고 링잉이 넓게 퍼진다. 뒤에 나온 형식들은 이 점을 고쳤다. WebP의 손실 모드는 동영상 부호화 방식(VP8)에서 왔고, 블록 크기를 바꾸고 이미 부호화한 이웃 블록으로 현재 블록을 예측한 뒤 차이만 적는다. 그래서 같은 화질에서 대개 JPEG보다 작다.

품질 값과 다시 저장하기

사진 프로그램의 "JPEG 품질" 손잡이는 양자화 표에 곱하는 배율을 고르는 손잡이다. 품질 100은 표의 모든 값을 1로 만들어 반올림 오차만 남기고, 품질을 내릴수록 나눗셈이 커진다. 숫자 자체에는 표준이 없어서, 같은 "품질 80"도 프로그램마다 표와 배율이 다르다. 그러니 품질 값은 프로그램 안에서 비교하는 눈금으로만 쓰고, 다른 프로그램의 값과 맞대어 보지 않는다.

아래 시뮬레이터는 이 브라우저에 들어 있는 실제 JPEG 인코더로 그림을 저장했다가 다시 읽는다. 오른쪽(좁은 화면에서는 아래) 돋보기는 사진의 한 부분을 네 배로 키워, 왼쪽 절반은 원본, 오른쪽 절반은 저장 결과를 보여 준다. 돋보기 네모는 큰 그림 위에서 끌어 옮긴다.

SIMULATOR

JPEG 품질과 다시 저장할 때의 손실

큰 그림 위의 돋보기 네모를 끈다
파일 크기—
비압축 대비—
PSNR—
해볼 것: ① 품질을 100에서 5까지 내려 본다. 크롬 기준으로 100은 391 KB(PSNR 50 dB), 90은 102 KB(34.5 dB), 60은 47 KB(29.4 dB), 10은 14 KB(24 dB)다. 용량은 90 근처에서 가장 가파르게 준다. 처음 사라지는 것은 판화 종이의 미세한 결이고, 30 아래에서는 물보라 둘레에 얼룩이, 10 아래에서는 하늘에 8×8 타일이 보인다. ② 품질 60에서 저장 횟수를 20으로 올린다. 같은 설정으로 다시 저장하면 PSNR이 29.4 dB 그대로다. 이미 버린 정보를 또 버릴 것이 거의 없기 때문이다. ③ "1화소씩 옮기기"를 켠다. 매번 블록 격자가 그림과 어긋나 새로 계산되므로 PSNR이 28.2(2번), 27.9(5번), 27.3 dB(20번)로 조금씩 계속 내려간다. 사진을 자르거나 회전한 뒤 다시 JPEG로 저장하는 일이 이것과 같다. (이 브라우저의 인코더를 쓰므로 크기와 PSNR은 브라우저마다 조금 다르다. PSNR은 RGB 세 채널의 평균 제곱 오차로 계산했다.)

PSNR(Peak signal-to-noise ratio)은 원본과 결과의 차이를 데시벨로 적은 숫자로, 클수록 원본에 가깝다. 사진에서 대략 40 dB를 넘으면 나란히 놓고 봐도 차이를 찾기 어렵고 30 dB 아래면 흔적이 보이기 시작한다고들 하지만, PSNR은 눈이 보는 방식을 단순화한 숫자라서 같은 PSNR도 그림에 따라 눈에 띄는 정도가 다르다. 숫자는 방향을 알려 주고, 판단은 100% 크기로 확대해 눈으로 한다.

PNG, JPEG, WebP: 내용에 맞는 형식

형식은 "좋은 것"과 "나쁜 것"이 아니라 "맞는 내용"이 다르다. PNG(Portable Network Graphics)는 무손실 압축(Lossless compression)이다. 화소 하나 틀리지 않게 되돌릴 수 있고, 같은 색이 이어지거나 반복되는 곳을 짧게 적는 방식이라 평평한 색면·글자·선화에 강하다. 대신 붓 자국과 종이 결처럼 화소마다 값이 조금씩 다른 사진에서는 거의 줄지 않는다. JPEG는 그 반대다. 사진의 부드러운 변화는 잘 줄이지만 날카로운 글자 둘레에 얼룩을 남긴다. WebP는 구글이 2010년에 발표한 형식으로 손실과 무손실 모드를 모두 갖고 투명도도 지원하며, 지금의 주요 브라우저는 모두 읽는다.

SIMULATOR

내용과 형식: 사진, 안내판, 선화

돋보기 네모를 끈다
PNG—
JPEG—
WebP—
보고 있는 형식의 PSNR—
해볼 것: ① "수채화 사진"에서 세 형식의 크기를 비교한다. PNG는 JPEG의 몇 배다. 화소마다 미세하게 다른 종이 결과 붓 자국은 무손실로는 줄일 곳이 없다. ② "안내판 그래픽"으로 바꾼다. 사진에서 열 배 넘게 벌어졌던 PNG와 JPEG의 차이가 1.5배 정도로 좁혀진다(품질 80에서 약 24 KB 대 16 KB). 대신 JPEG로 보면 글자 둘레에 얼룩과 번진 색 테두리가 생기고, PNG는 화소 하나 틀리지 않는다(PSNR ∞). 돋보기를 빨간 글자 위로 옮긴다. ③ "판화 선"에서 JPEG 품질을 40으로 내리고 WebP와 번갈아 본다. 같은 품질 값이라도 형식마다 남기는 흔적과 크기가 다르다. 품질 값은 형식끼리 같은 눈금이 아니다. (이 브라우저의 인코더를 쓴다. WebP 저장을 지원하지 않는 브라우저에서는 WebP 칸에 그렇게 표시된다. 그림 크기는 가로 480화소다.)
형식압축잘 맞는 내용피할 때
JPEG손실사진, 수채화·유화 같은 부드러운 그림. 어디서나 열린다글자·로고·선화, 다시 고칠 중간 파일
PNG무손실글자가 든 그래픽, 화면 캡처, 투명 배경, 선화큰 사진(용량이 몇 배)
WebP손실·무손실웹에 올리는 사진과 그래픽. 같은 화질에서 대개 JPEG보다 작다인쇄소 제출, 오래된 프로그램과 주고받기
TIFF무손실(또는 무압축)보관용 원본, 16비트 편집 결과, 인쇄소 제출웹(브라우저가 보여 주지 않는다)
같은 사진, 다섯 개의 파일 휴대폰으로 창가의 화분이나 책 한 권을 찍는다. 사진 편집 앱이나 컴퓨터에서 그 사진을 ① PNG, ② JPEG 품질 95, ③ JPEG 품질 75, ④ JPEG 품질 30, ⑤ 가로 800화소로 줄인 JPEG 품질 75로 각각 내보내고 파일 크기를 종이에 적는다. 그다음 화면에서 다섯 장을 100% 크기로 열어 같은 부분(잎 가장자리, 책 제목 글자)을 비교하고, 어느 것부터 차이가 보이는지 표시한다. 끝으로 ④를 인쇄해 보면 화면에서 안 보이던 블록이 종이에서 보이는지도 확인한다. 크기 숫자와 눈의 판단이 어디서 갈리는지가 이 과제의 요점이다.

용도별 내보내기 작업대

지금까지의 숫자를 "어디에 쓸 파일인가"라는 물음으로 모은다. 인쇄용은 지면 크기와 ppi가 화소 수를 정하고, 형식은 손실이 없는 쪽을 고른다. 웹용은 화면에서 보일 크기가 화소 수를 정하고, 형식과 품질은 용량과 화질의 거래로 정한다. 아래 작업대는 수채화 한 점(호머의 「나소의 담」을 서윤의 그림 대신 쓴다)의 1600화소 파일로 이 거래를 직접 해 본다. 그래프는 고른 크기와 형식에서 품질에 따라 파일 크기가 어떻게 변하는지 이 브라우저의 인코더로 그때그때 잰 것이다.

SIMULATOR

용도별 내보내기 작업대

위 그림의 돋보기 네모를 끈다
파일 크기—
PSNR(같은 크기 무손실 대비)—
인쇄했을 때—
판정—
해볼 것: ① "웹사이트"(가로 1600, WebP 80)에서 시작한다. 이 브라우저(크롬 기준)에서 약 220 KB다. 형식을 JPEG로 바꾸면 같은 품질에서 약 310 KB, PNG는 3.3 MB다. 그래프에서 품질 90을 넘으면 크기가 가파르게 늘어나는 "무릎"을 찾는다. ② 가로 화소를 800으로 내린다. 화소 수가 4분의 1이 되니 용량도 약 70 KB로 크게 준다. 휴대폰 화면에서만 볼 사진이라면 충분하지만, 넓은 모니터에서 크게 열면 흐릿하다. ③ "도록 전면"을 누른다. 1600화소를 154 mm에 펴면 264 ppi라 300에 못 미친다. 이 파일은 웹용이고, 인쇄용은 카메라 원본에서 1819화소 이상으로 다시 내보내야 한다. 인쇄용에서 손실 형식을 고르면 판정이 경고를 띄운다. (돋보기는 결과 파일의 화소를 1:1로 보여 준다. PSNR은 같은 크기로 줄인 무손실 그림과 비교한 압축 손실만의 값이다.)

작업대에서 보듯 웹용 파일의 크기를 가장 크게 바꾸는 손잡이는 화소 수이고, 그다음이 형식, 마지막이 품질이다. 품질 70~85 근처는 용량과 화질의 거래가 가장 유리한 구간이다. 90을 넘기면 용량은 빠르게 늘지만 눈에 보이는 차이는 거의 없고, 60 아래로 내리면 용량은 조금 줄지만 흔적이 보이기 시작한다. 인쇄용은 이 거래를 하지 않는다. 인쇄소에 보내는 파일은 무손실로, 지면 크기에서 300 ppi가 되게 만든다. 이 단계들은 13장 실험실에서 보정·크롭과 함께 한 번 더 모인다.

내보낼 때 함께 확인하는 것 ① 색 공간: 웹용은 sRGB로 변환해 내보낸다. 넓은 색 공간(Adobe RGB 등)의 파일을 변환 없이 올리면 일부 환경에서 색이 흐리게 보인다. 인쇄용 색 변환(CMYK)은 인쇄소의 안내를 따른다(ColorBook 15장). ② 메타데이터: 휴대폰 사진에는 촬영 위치(GPS)가 들어 있을 수 있다. 서점 웹사이트·SNS에 올릴 때는 위치 정보를 지운다. 반대로 작품 사진의 작가·제목·저작권 정보는 남겨 두면 좋다. ③ 선명하게 하기(샤프닝): 크게 줄인 사진은 조금 무르게 보이므로 많은 프로그램이 내보내기 단계에서 약한 샤프닝을 건다. 웹용과 인쇄용은 알맞은 양이 다르니 용도마다 따로 확인한다.

서윤의 겨울 촬영 노트

CASE 서윤촬영 노트 · 10장

하나의 원본, 두 갈래의 파일

보정을 마친 RAW 파일이 서른 장 남짓 쌓이자, 서윤은 도록 인쇄소와 서점 웹사이트에 보낼 파일을 정해야 했다. 처음에는 "그냥 제일 큰 JPEG 하나로 다 쓰면 되지 않나" 생각했다. 인쇄소 담당자는 "A5 도록이면 300 dpi로 주세요"라고만 했고, 서점 주인은 "웹사이트가 느리면 손님이 안 봐요"라고 했다.

서윤은 먼저 인쇄용 숫자를 계산했다. A5(148×210 mm)에 사방 3 mm 재단 여유를 더하면 154×216 mm이고, 300 ppi로 채우려면 1819×2551화소가 필요하다. 쪽 안쪽에 여백을 두고 작품을 놓는 작품면(최대 118×180 mm)은 1394×2126화소다. 미러리스 원본은 이보다 훨씬 크니 화소는 모자라지 않았다. 문제는 형식이었다. 인쇄소가 말한 "300 dpi"는 사진 파일의 300 ppi를 뜻했고, 파일은 손실 없는 TIFF로 받는다고 했다. 한도경은 "원본은 건드리지 말고, 보낼 때마다 거기서 새로 뽑아"라며 필름 시절 원판과 인화의 관계에 빗댔다.

웹용은 작업대에서 직접 재 보았다. 호머의 수채화를 대신 놓고 가로 1600화소로 줄이면 비압축 5.4 MB, PNG 약 3.3 MB, JPEG 품질 85 약 365 KB, WebP 품질 80 약 220 KB였다(크롬 인코더 기준). 100% 크기로 확대해 실물 사진과 번갈아 봐도 WebP 80과 JPEG 85에서 붓 자국의 차이를 찾지 못했다. SNS는 올릴 때 한 번 더 압축하므로 그만큼 여유를 두어 JPEG 품질 90(약 460 KB)으로 정했다. 행사 안내처럼 글자가 든 그래픽은 JPEG로 저장했을 때 글자 둘레가 지저분해지는 것을 보고 PNG로 남기기로 했다.

용도크기형식·품질메모
보관 원본카메라 원본 그대로RAW + 16비트 TIFF손대지 않는다
도록 전면1819×25518비트 TIFF(LZW 무손실)154×216 mm, 300 ppi
도록 작품면최대 1394×21268비트 TIFF(LZW 무손실)지면 크기 × 300 ppi, 최소 240 ppi
웹사이트가로 1600WebP 품질 80 (대체 JPEG 85)sRGB, 장당 400 KB 이하
SNS가로 1600JPEG 품질 90위치 정보 삭제
글자가 든 안내 그래픽가로 1600PNG사진과 섞지 않는다
이 장에서 정한 것용도별 해상도와 형식·품질은 위 표와 같다. 8비트로 줄이는 것은 내보내기 단계에서만 한 번, 언제나 보관 원본에서 새로 내보낸다. 웹용 파일을 인쇄에 쓰지 않는다(1600화소를 154 mm에 펴면 264 ppi). 인쇄소에 보내는 파일의 ppi 메모 값도 300으로 적는다.
아직 남은 문제SNS에 올릴 서점 사진은 화면 비율이 제각각이다. 한 장씩 고를 때와 여러 장을 이어서 보여 줄 때 어떻게 자르고 고를 것인가.
다음 단계11장: 사진의 구도와 자르기, 연속 사진에서 고르기.

핵심 정리

  1. 화소 수에는 길이 단위가 없다. 인쇄 크기를 정해야 ppi(화소 수 × 25.4 ÷ mm)가 정해진다. 화면은 파일의 ppi 메모 값을 읽지 않는다.
  2. 300 ppi는 30 cm 거리에서 1분각을 구별하는 시력을 기준으로 한 어림값이다. 멀리서 보는 인쇄물은 훨씬 낮아도 되고, 300을 크게 넘겨도 인쇄물은 좋아지지 않는다.
  3. 줄일 때 필터를 넓히지 않으면 촘촘한 무늬가 앨리어싱과 무아레를 만든다. 키우기는 사라진 정보를 되살리지 못하고 계단이나 흐림만 남긴다.
  4. JPEG는 색차를 줄이고, 8×8 블록을 DCT로 무늬 성분으로 바꾼 뒤, 촘촘한 성분을 크게 나눠 버린다. 블록 현상, 링잉, 색 번짐은 이 과정의 흔적이다.
  5. 품질 값은 양자화 배율의 눈금이고 프로그램·형식마다 다르다. 같은 설정으로 다시 저장하면 손실이 금방 멈추지만, 자르거나 옮긴 뒤 다시 저장하면 계속 쌓인다.
  6. 사진은 JPEG나 WebP, 글자·선화·평면 그래픽은 PNG, 보관과 인쇄는 무손실 TIFF가 맞다. 웹용은 화소 수 → 형식 → 품질 순으로 용량을 정한다.

확인 퀴즈

1. 가로 1600화소 사진을 A5 도록의 재단 여유까지 꽉 차게(가로 154 mm) 인쇄하려 한다. 이때의 ppi와 판단으로 가장 알맞은 것은?

ppi = 1600 × 25.4 ÷ 154 ≈ 264. 300 ppi로 154 mm를 채우려면 154 ÷ 25.4 × 300 ≈ 1819화소가 필요하다. 파일의 ppi 메모 값만 바꾸면 같은 크기에서는 화소 수가 그대로이므로 선명해지지 않는다(메모를 300으로 바꾸면 인쇄 크기가 135 mm로 줄어들 뿐이다). 72 ppi는 화면과 무관한 오래된 관습이다.

2. 가는 평행선이 많은 동판화 사진을 최근접 이웃 방식으로 3분의 1 크기로 줄였더니 원래 없던 굵은 물결무늬가 나타났다. 이 현상과 대책으로 맞는 것은?

새 격자가 원래 무늬보다 성기면 격자가 무늬를 띄엄띄엄 집어 가짜 저주파 무늬를 만든다. 이것이 앨리어싱이고 줄무늬에서는 무아레로 보인다. 줄이기 전에 가는 무늬를 뭉쳐 주는 필터(면적 평균, 넓힌 바이큐빅 등)가 대책이다. 저장 형식이나 비트 깊이와는 상관없는 리샘플링 단계의 문제다.

3. JPEG의 품질을 낮추면 파일이 작아지는 가장 직접적인 이유는?

품질 값은 양자화 표의 배율을 정한다. 나눗셈이 커지면 작은 계수, 특히 촘촘한 무늬의 계수가 0이 되고, 부호화 단계가 0의 연속을 짧게 적는다. DCT 자체는 64개 화소를 64개 계수로 바꿀 뿐 아무것도 버리지 않는다. 화소 수와 색의 수는 품질 값으로 바뀌지 않는다.

4. 서점의 행사 안내 이미지(흰 바탕에 빨간 큰 글자와 작은 검은 글자)를 웹에 올리려 한다. 가장 알맞은 선택은?

평평한 색면과 글자는 같은 값이 이어지므로 무손실 압축이 잘 통하고, JPEG의 블록·링잉·색차 줄이기 흔적이 글자 둘레에서 가장 잘 보인다. JPEG 품질 100도 색 변환과 반올림 때문에 엄밀한 무손실은 아니다. TIFF는 브라우저가 보여 주지 않으므로 웹에 맞지 않는다.