PDF 압축률이 파일마다 다른 이유: 이미지·글꼴·스트림과 압축 필터

같은 압축 도구로 어떤 PDF는 90% 줄고 어떤 PDF는 그대로인 이유를 파일 구조로 설명합니다. Flate·DCT·JBIG2·JPX 필터, 객체 스트림, 스캔 문서용 MRC, 상황별 처방까지.

everytooleverywhereallatonce · 작성

PDF 압축 도구에 파일 두 개를 넣었는데 하나는 40MB에서 3MB가 되고, 다른 하나는 2MB에서 1.9MB가 되는 일은 흔합니다. 도구 성능 차이처럼 보이지만 대부분은 파일 안에 무엇이 어떤 방식으로 들어 있느냐의 차이입니다. PDF는 하나의 압축 형식이 아니라 여러 종류의 데이터를 각자 다른 방식으로 압축해 담는 상자이기 때문입니다.

PDF 용량은 어디에 쓰이나

PDF 파일은 번호가 붙은 객체들의 모음입니다. 페이지, 글꼴, 이미지, 책갈피가 모두 객체이고, 큰 데이터는 「스트림」이라는 형태로 들어갑니다. 용량 대부분을 차지하는 스트림은 세 종류입니다.

구성 요소 들어 있는 것 전형적인 크기
이미지 사진, 스캔 페이지, 스크린샷 사진 한 장이 수백 KB~수 MB
글꼴 문서에 쓴 글꼴의 윤곽선 데이터 라틴 글꼴 서브셋은 수십 KB, 한글·한자 전체 내장은 수 MB
콘텐츠 스트림 글자 배치, 선·도형을 그리는 명령 보통 페이지당 수 KB, 도면·지도는 수 MB

워드로 쓴 30쪽 보고서는 텍스트가 대부분이라 콘텐츠 스트림이 작고, 글꼴이 용량의 주인공이 됩니다. 스캔한 계약서는 페이지 하나가 통째로 이미지라 이미지가 95% 이상을 차지합니다. CAD에서 뽑은 도면은 이미지가 하나도 없는데 선 수십만 개 때문에 콘텐츠 스트림이 수십 MB가 되기도 합니다. 압축 도구가 효과를 내는지는 이 비율에서 먼저 결정됩니다.

스트림마다 붙는 필터

PDF 규격(ISO 32000)은 스트림을 어떤 방식으로 압축했는지 /Filter 항목에 적게 합니다. 뷰어는 이 이름을 보고 해독 방법을 고릅니다. 자주 보는 필터는 다음과 같습니다.

  • FlateDecode: zlib/deflate(RFC 1950·1951) 무손실 압축입니다. PNG와 같은 알고리즘이고, 콘텐츠 스트림·글꼴·무손실 이미지 대부분이 이것을 씁니다. 이미지에는 PNG와 같은 예측기(Predictor)를 붙여 행마다 이웃 픽셀과의 차이를 저장하면 압축이 훨씬 잘 됩니다.
  • DCTDecode: JPEG입니다. 사진에 쓰는 손실 압축으로, 파일 안의 바이트가 JPEG 파일과 똑같습니다.
  • JPXDecode: JPEG 2000입니다. PDF 1.5에서 추가되었습니다. 같은 화질에서 JPEG보다 작게 만들 수 있지만 처리하는 프로그램이 적습니다.
  • CCITTFaxDecode: 팩스용 1비트 압축(ITU-T T.4·T.6)입니다. 흑백 스캔 문서에 오래 쓰였습니다.
  • JBIG2Decode: 1비트 이미지용으로 PDF 1.4에서 추가되었습니다. 페이지에 반복되는 글자 모양을 기호 사전에 한 번만 저장하고 위치만 기록할 수 있어 텍스트 스캔을 매우 작게 만듭니다.
  • LZWDecode, RunLengthDecode, ASCIIHexDecode, ASCII85Decode: 오래된 방식이거나 이진 데이터를 텍스트로 바꾸는 인코딩입니다. ASCII 계열은 오히려 용량을 늘립니다.

여기서 중요한 사실이 하나 나옵니다. 이미 DCT나 JBIG2로 압축된 데이터를 Flate로 한 번 더 감싸도 거의 줄지 않습니다. 압축된 데이터는 통계적으로 무작위에 가까워서 무손실 압축기가 찾을 반복이 없기 때문입니다. PDF를 ZIP으로 묶어도 크기가 별로 안 변하는 것과 같은 이유입니다.

크게 줄어드는 PDF의 조건

압축 도구가 파일을 크게 줄이는 경우는 대개 다음 셋 중 하나입니다.

첫째, 표시 크기보다 해상도가 훨씬 높은 이미지. 스마트폰 사진은 1200만 화소(4000×3000)가 흔합니다. 이것을 A4 한 면에 꽉 채우면 약 340 DPI이고, 화면으로 보거나 사무용 프린터로 뽑는 데는 150 DPI면 충분합니다. 150 DPI로 줄이면 가로·세로가 각각 약 0.44배, 픽셀 수는 약 19%가 됩니다. JPEG 용량은 대략 픽셀 수를 따라가므로 이미지가 5분의 1 안팎으로 줄어듭니다. 사진을 반 페이지 크기로 넣었다면 배치 DPI는 두 배가 되고 절감 폭은 더 커집니다.

둘째, 압축이 안 된 이미지. 오래된 프로그램이나 일부 스캐너 드라이버는 이미지를 무압축이나 예측기 없는 Flate로 넣습니다. A4 한 쪽을 300 DPI 컬러로 무압축 저장하면 2481×3508×3바이트, 약 26MB입니다. 이런 파일은 JPEG로 바꾸기만 해도 수십 분의 1이 됩니다.

셋째, 편집용 부가 데이터. 일러스트레이터에서 「편집 기능 유지」로 저장한 PDF는 원본 작업 파일을 통째로 안에 담습니다. 여러 PDF를 합친 파일에는 같은 글꼴과 로고가 원본 파일 수만큼 들어 있기도 합니다. 이런 것은 화질 손실 없이 지울 수 있습니다.

거의 안 줄어드는 PDF의 조건

반대로 도구를 바꿔 가며 돌려도 안 줄어드는 파일도 이유가 뚜렷합니다.

적정 해상도로 이미 JPEG 압축된 사진. 150 DPI에 품질 75 정도로 저장된 사진은 다시 압축해도 몇 %밖에 안 줄어들고, JPEG를 다시 저장할 때마다 블록 경계와 색 번짐이 쌓입니다. 좋은 압축 도구는 줄어드는 양이 작으면 원래 데이터를 그대로 둡니다.

서브셋 없이 내장된 동아시아 글꼴. 라틴 글꼴은 수백 자면 충분하지만 한글 글꼴은 완성형 11,172자에 한자까지 담아 글꼴 하나가 수 MB가 됩니다. 문서에서 쓴 글자만 담는 서브셋 내장을 하면 수백 KB 이하로 떨어집니다. 서브셋은 글꼴 구조를 다시 만드는 작업이라 PDF를 만든 프로그램에서 설정하는 편이 확실합니다. 한글·워드·인디자인 모두 PDF 저장 옵션에 이 설정이 있습니다.

벡터 도면. 선 하나하나가 「이동, 선 긋기」 명령이라 도면이 복잡할수록 콘텐츠 스트림이 커집니다. 이미 Flate로 압축돼 있으면 압축 수준을 올려도 몇 % 수준입니다. 도면을 줄이는 현실적인 방법은 CAD 쪽에서 불필요한 레이어를 빼고 내보내는 것입니다.

JPEG 2000으로 저장된 이미지. 일부 스캔 소프트웨어와 전자책 제작 도구는 이미지를 JPX로 넣습니다. 이미 효율이 좋은 형식인 데다, 브라우저 기반 도구 상당수는 JPX를 해독하지 못해 손대지 않고 넘어갑니다. 이런 파일을 더 줄이려면 JPX를 다룰 수 있는 데스크톱 프로그램에서 해상도를 낮춰 다시 저장해야 합니다.

흑백 스캔. 스캐너가 이미 JBIG2나 CCITT G4로 저장한 흑백 스캔은 페이지당 용량이 원래 작아서 줄일 여지가 거의 없습니다.

객체 스트림: 구조 자체를 압축하기

PDF 1.4까지는 페이지·글꼴 설명 같은 사전 객체가 압축되지 않은 텍스트로 저장되었고, 파일 끝의 교차 참조 표도 객체마다 20바이트짜리 줄을 하나씩 가졌습니다. 객체가 수만 개인 문서에서는 이것만 해도 적지 않은 용량입니다.

PDF 1.5는 두 가지를 도입했습니다. 여러 객체를 한 스트림에 모아 Flate로 압축하는 객체 스트림과, 교차 참조 표 자체를 압축된 이진 스트림으로 저장하는 교차 참조 스트림입니다. 다만 스트림 객체(이미지, 글꼴 데이터 등)는 객체 스트림에 넣을 수 없으므로 효과는 구조 정보에 한정됩니다. 태그가 많은 접근성 PDF나 페이지 수가 많은 문서에서 눈에 띄고, 사진 위주 문서에서는 거의 차이가 없습니다.

스캔 문서와 MRC

컬러 스캔은 어려운 경우입니다. 글자는 선명해야 하고 배경과 사진은 부드러워야 하는데, 한 가지 압축으로는 둘 다 만족시키기 어렵습니다. JPEG로 낮은 품질을 주면 글자 가장자리에 잡티가 생기고, 무손실로 두면 파일이 거대해집니다.

**MRC(Mixed Raster Content, ITU-T T.44)**는 페이지를 층으로 나눠 이 문제를 풉니다. 글자 모양은 고해상도 1비트 마스크(JBIG2나 G4), 글자 색과 배경은 저해상도 컬러 이미지(JPEG 등)로 따로 저장하고, 마스크로 두 층을 합성합니다. PDF에서는 이미지 마스크와 소프트 마스크 같은 기존 기능을 조합해 구현하므로 일반 뷰어에서 그대로 열립니다. 상용 스캔 소프트웨어의 「고압축」 모드가 대개 이 방식이고, 페이지당 수십~수백 KB 수준으로 컬러 스캔을 담을 수 있습니다.

MRC와 JBIG2에는 주의점도 있습니다. JBIG2의 손실 모드는 비슷해 보이는 글자 모양을 하나의 기호로 합칩니다. 2013년 독일의 데이비드 크리젤은 제록스 복합기가 스캔 중 숫자 6을 8로 바꿔 저장하는 현상을 발견해 공개했고, 원인이 이 기호 통합이었습니다. 숫자가 중요한 회계·의료 문서는 JBIG2 무손실 모드나 G4를 쓰는 것이 안전합니다.

상황별 처방

메일 첨부 한도를 넘은 사진 증빙. 이미지 비중이 크고 배치 DPI가 높은 전형적인 경우입니다. PDF 용량 줄이기를 150 DPI로 돌리면 대부분 해결됩니다. 사진을 PDF로 묶기 전이라면 이미지 압축기로 먼저 줄여 두는 편이 더 가볍고 결과도 예측하기 쉽습니다.

글꼴 때문에 무거운 보고서. 압축 도구보다 원본 프로그램의 PDF 저장 옵션을 먼저 보세요. 「글꼴 포함」은 켜 두되 「사용한 문자만 포함」을 선택하면 됩니다.

흑백 인쇄로 낼 컬러 문서. PDF 흑백 변환으로 색을 회색으로 바꾸면 흑백 프린터에서 명암이 예측 가능해집니다. 다만 흑백 변환은 컬러 JPEG를 무손실 회색 이미지로 다시 담기 때문에 사진이 많으면 파일이 커질 수 있습니다. 용량이 중요하면 흑백 변환 뒤 압축 도구를 한 번 더 돌리세요. 순서를 반대로 하면 흑백 변환이 압축한 JPEG를 다시 무손실로 풀어 버립니다.

스캔한 계약서. 가능하면 스캔 단계에서 해결합니다. 글자 위주라면 300 DPI 흑백(1비트)으로 스캔해 G4나 무손실 JBIG2로 저장하는 것이 가장 작고 선명합니다. 도장·서명의 색이 필요하면 스캐너의 MRC 고압축 모드를 쓰세요. 이미 컬러로 스캔된 파일을 압축 도구로 줄일 때는 150 DPI 아래로 내리면 작은 글씨가 읽기 어려워질 수 있습니다.

서명된 PDF. 어떤 압축이든 파일을 다시 쓰므로 전자서명은 무효가 됩니다. 서명 전에 압축하고 그 뒤에 서명하는 순서를 지키세요.

흔한 오해

「PDF를 ZIP으로 묶으면 작아진다」: 내부 스트림이 이미 압축돼 있어 거의 변하지 않습니다. 텍스트만 있는 무압축 PDF 같은 예외에서만 효과가 있습니다.

「압축을 여러 번 하면 계속 줄어든다」: 한 번 목표 해상도로 줄인 뒤에는 더 줄일 이미지가 없습니다. 품질을 낮춰 반복하면 줄기는 하지만 화질 손실이 누적됩니다.

「DPI 설정이 높을수록 좋다」: 배치 크기에서 필요한 해상도를 넘는 픽셀은 인쇄기가 버립니다. 사무용 출력은 150~200, 고급 인쇄도 300 DPI면 대부분 충분합니다.

출처