Lossy vs Lossless nén PDF: JPEG vs FLATE — khi nào mất dữ liệu là OK

JPEG (DCT) vs FLATE (zlib) trong PDF. Khi nào nén mất dữ liệu chấp nhận được, khi nào phải giữ nguyên.

Nhiều người nghĩ "nén PDF" là 1 thao tác đơn giản — bấm nút, file nhỏ lại. Nhưng bên trong, engine nén xử lý text và ảnh bằng 2 phương pháp hoàn toàn khác nhau. Hiểu điều này sẽ giải thích tại sao nén không bao giờ làm hỏng text, nhưng có thể làm mờ ảnh.

Mình mất khá lâu mới hiểu rõ cơ chế — chia sẻ lại cho ai cần.

Hai loại nén trong PDF

PDF spec (ISO 32000) định nghĩa nhiều filter nén, nhưng thực tế chỉ 2 cái quan trọng:

Filter Loại Áp dụng cho Mất dữ liệu?
FlateDecode (zlib/deflate) Lossless Text, vector, metadata Không — giải nén ra y hệt bản gốc
DCTDecode (JPEG) Lossy Ảnh raster (photo) Có — mất chi tiết nhỏ vĩnh viễn

Ngoài ra còn: JBIG2 (cho ảnh đen trắng, dùng trong scan), JPEG2000 (PDF 1.5+), LZW (cũ, ít dùng). Nhưng 90% file PDF ngoài đời chỉ dùng FLATE + DCT.

FLATE — nén text không mất gì

FlateDecode dùng thuật toán deflate (giống ZIP). Cách hoạt động: tìm pattern lặp lại trong data stream, thay bằng reference ngắn hơn. Khi giải nén, khôi phục 100% data gốc.

Text trong PDF được lưu dạng stream (operator như Tj, TJ). Khi nén FLATE, stream nhỏ lại 40-60% nhưng giải nén ra đúng từng byte. Đây là lý do nén PDF không bao giờ làm hỏng text — vì text dùng lossless compression.

Hỏi: "Vậy tại sao nén mạnh hơn file không nhỏ thêm?"
Đáp: FLATE đã tối ưu rồi. Nén thêm không giảm được text nữa — chỉ ảnh mới giảm thêm bằng cách hạ quality JPEG.

DCT (JPEG) — nén ảnh có mất mát

Ảnh trong PDF được lưu dạng raster (bitmap). Khi nén lossy, engine JPEG chia ảnh thành block 8x8 pixel, chuyển sang frequency domain (DCT transform), rồi bỏ bớt high-frequency data (chi tiết nhỏ, noise).

Quality càng thấp → bỏ càng nhiều data → file càng nhỏ → ảnh càng mờ. Quá trình này không thể đảo ngược — data đã bỏ thì mất vĩnh viễn.

Mình test 1 ảnh sản phẩm (1200x800px) ở các mức JPEG quality:

JPEG Quality Kích thước ảnh SSIM so với gốc Nhận xét bằng mắt
95 340 KB 0.99 Không phân biệt được
80 120 KB 0.97 Nét, hơi soft ở edges
60 65 KB 0.93 Mờ nhẹ, thấy artifact khi zoom
30 28 KB 0.84 Block artifact rõ, mờ nhiều

Ghostscript xử lý thế nào?

AloPDF dùng Ghostscript để nén PDF. Khi bạn chọn mức nén, Ghostscript xử lý riêng biệt:

  • Text streams: Luôn dùng FlateDecode — không bao giờ đổi quality
  • Color images: Nén lại bằng DCT với quality setting tương ứng
  • Grayscale images: Tương tự color
  • Mono images (1-bit): JBIG2 hoặc CCITT — lossless

Các preset của Ghostscript map thế này:

Preset Image quality Downsample DPI Use case
/screen ~30-40 72 Xem online, email
/ebook ~50-60 150 Đọc digital, in nội bộ
/printer ~70-80 300 In chất lượng cao
/prepress ~90-95 300 In thương mại, giữ màu

Khi nào mất dữ liệu là OK?

Nghe "lossy" thì sợ, nhưng thực tế nhiều trường hợp hoàn toàn chấp nhận được:

  • Gửi email: File 15MB → 3MB, ảnh hơi soft nhưng vẫn đọc được → OK
  • Upload web: Không ai zoom 400% trên web → OK
  • Archive nội bộ: Tài liệu cũ chỉ cần đọc text → OK (text không bị ảnh hưởng)
  • File scan: Ảnh scan 200 DPI nén quality 60 vẫn đọc được → phần lớn OK

Và khi nào KHÔNG nên dùng lossy:

  • File thiết kế/in ấn: Cần giữ chi tiết ảnh tối đa
  • Ảnh y khoa: CT scan, X-ray — mất detail = mất thông tin chẩn đoán
  • Bản vẽ kỹ thuật: Line art mỏng sẽ bị artifact
  • Chứng từ pháp lý: Cần chứng minh file không bị modify
Quy tắc của mình: Nếu file chỉ chứa text + bảng biểu → nén mạnh thoải mái (text dùng lossless, không mất gì). Nếu file có ảnh quan trọng → nén vừa hoặc dùng preset "printer".

Liên hệ với kết quả benchmark (bài EX1)

Trong bài test 100 file PDF, mình phát hiện:

  • File toàn text (hóa đơn): nén 90% mà ảnh vẫn OK — vì ảnh chỉ là logo nhỏ, text thì lossless
  • File brochure (80% ảnh): nén 70% đã thấy mờ — vì phần lớn data là ảnh, bị lossy mạnh
  • File slide (mix): nén 70% vẫn ổn — text giữ nguyên, hình nền mờ nhẹ không ảnh hưởng

Biết cơ chế lossless/lossy → hiểu tại sao cùng mức nén mà file này OK file kia không.

Tóm lại

Hai điều cần nhớ:

  1. Text trong PDF luôn được nén lossless — dù bạn chọn mức nén nào, text không bao giờ bị hỏng
  2. Ảnh trong PDF nén lossy — quality càng thấp, ảnh càng mất chi tiết, không khôi phục được

Khi dùng công cụ nén PDF, hãy quyết định dựa trên nội dung file: nhiều text → nén mạnh OK. Nhiều ảnh quan trọng → nén nhẹ hoặc không nén.

Dùng ngay: Nén PDF — Giảm dung lượng file PDF mà không mất chất lượng

Nén file PDF online miễn phí, giảm dung lượng tới 90%. 4 mức nén tùy chỉnh. File nén xong vẫn sắc nét, giữ nguyên text và hình ảnh. Nhanh, bảo mật, không cần phần mềm.

Mở công cụ →

Bài viết liên quan

OCR engine so sánh: Tesseract vs EasyOCR vs PaddleOCR — tiếng Việt So sánh 3 engine OCR cho tiếng Việt: kiến trúc, ưu nhược, tốc độ, độ chính xác trên văn bản Việt. Bảo mật PDF thực sự an toàn? AES-128 vs 256, owner vs user password AES-128 vs AES-256, owner password vs user password. Tại sao "gỡ mật khẩu" hoạt động và giới hạn bả… PDF/A lưu trữ dài hạn: 1b vs 2b vs 3b — yêu cầu lưu trữ Việt Nam PDF/A-1b vs 2b vs 3b: khác biệt, use case, và yêu cầu lưu trữ theo Luật Lưu trữ 2024 Việt Nam. Font embedding trong PDF: tại sao lỗi font và cách fix triệt để Embedded vs subset vs system font. Tại sao PDF bị lỗi font tiếng Việt và cách đảm bảo font hiển thị…