2026-06-28

Thuật toán nén hình ảnh thực sự hoạt động như thế nào: DCT, LZW & AVIF

None

Thuật toán nén hình ảnh thực sự hoạt động như thế nào: DCT, LZW & AVIF

Cập nhật lần cuối: Ngày 28 tháng 6 năm 2026

Nén hình ảnh sẽ thu nhỏ tệp bằng cách loại bỏ thông tin mà mắt bạn không thể nhìn thấy. Các thuật toán đằng sau JPEG, PNG, GIF, WebP và AVIF không phải là phép thuật - chúng là một tập hợp các bước cơ học cụ thể. Hiểu chúng sẽ cho bạn biết lý do tại sao ảnh JPEG ở chất lượng 80 trông ổn, tại sao PNG bóng bay trên ảnh và tại sao AVIF mã hóa chậm như vậy. Đây là hướng dẫn thực hành toán học thực tế của người học, không phải là một cuộc thi phổ biến về dạng thức.

Trả lời nhanh: thuật toán nén ảnh hoạt động như thế nào?

Mọi định dạng đều thực hiện ba công việc giống nhau theo trình tự. Đầu tiên, nó chuyển đổi các pixel để thông tin quan trọng tập trung vào một vài con số. Thứ hai, nó lượng tử hóa — làm tròn những số đóng góp ít nhất (đây là phần bị mất và các định dạng không mất dữ liệu sẽ bỏ qua phần này). Thứ ba, nó mã entropy các giá trị còn lại nên các giá trị thường xuyên chiếm ít bit hơn các giá trị hiếm.

Sự phân chia giữa các định dạng chủ yếu nằm ở bước đầu tiên. JPEG và AVIF sử dụng biến đổi tần số (DCT). PNG và WebP-lossless sử dụng tính năng lọc dự đoán. GIF sử dụng mã hóa từ điển (LZW). Tỷ lệ nén mà bạn thấy trong thực tế được xác định bằng cách mỗi định dạng loại bỏ hoặc đóng gói dữ liệu một cách khéo léo như thế nào.

Sự khác biệt giữa nén lossy và lossless là gì?

Sự khác biệt quan trọng nhất trong việc nén ảnh là liệu dữ liệu có bị loại bỏ hay không.

Tính năng nén không mất dữ liệu sẽ tái tạo lại từng pixel ban đầu. Nó chỉ có thể loại bỏ dư thừa — các byte lặp lại, độ dốc có thể dự đoán được, các dải màu giống hệt nhau. Trần của nó là entropy của hình ảnh: nhiễu ngẫu nhiên thuần túy hầu như không bị nén chút nào. PNG, GIF và WebP-lossless có tại đây.

Nén mất mát sẽ loại bỏ thông tin vĩnh viễn, đánh cược rằng những gì nó loại bỏ nằm dưới ngưỡng cảm nhận của bạn. Đặt cược thường vào chi tiết tần số cao (kết cấu mịn, các cạnh) và độ phân giải màu sắc (mắt bạn đọc độ sáng sắc nét hơn nhiều so với màu sắc). JPEG, WebP-lossy, AVIF và HEIC đều có tại đây.

Phần thưởng thật ấn tượng. Đối với một bức ảnh thông thường, đầu ra bị suy hao thường nhỏ hơn từ 5 đến 10 lần so với ảnh không bị suy hao tương đương ở mức chất lượng mà hầu hết người xem không thể phân biệt được với ảnh gốc. Cái giá phải trả là không thể đảo ngược: mỗi lần mã hóa lại bị mất sẽ kết hợp các tạo phẩm, đó là lý do tại sao bạn giữ một tệp chính sạch sẽ.

Tính năng nén DCT của JPEG thực sự hoạt động như thế nào?

JPEG là đường dẫn tổn hao chuẩn. Nó chạy trong năm giai đoạn và Biến đổi Cosine rời rạc (DCT) là trung tâm của nó. Năm giai đoạn là:

Sân khấu Chuyện gì xảy ra Có thể đảo ngược?
1. Chuyển đổi màu sắc RGB trở thành YCbCr (một kênh luma, hai kênh sắc độ) Đúng
2. Lấy mẫu phụ sắc độ Sắc độ được lấy mẫu xuống, thường là 4:2:0 Không (mất chi tiết màu sắc)
3. Tách khối + DCT Mỗi kênh chia thành các khối 8x8; DCT biến mỗi hệ số thành 64 tần số Đúng
4. Lượng tử hóa Các hệ số được chia cho một ma trận; nhiều làm tròn về 0 Không (mất mát chính)
5. Mã hóa Entropy Các hệ số được sắp xếp theo thứ tự zigzag, được mã hóa theo thời gian chạy, sau đó được mã hóa Huffman Đúng

Đây là một ví dụ cụ thể về bước DCT. Lấy một khối 8x8 trong đó mỗi pixel có cùng giá trị độ sáng là 200. Đầu tiên, bộ mã hóa chuyển cấp bằng cách trừ đi 128, để lại khối phẳng 72. Sau đó, 2D DCT tạo ra 64 hệ số — nhưng vì đầu vào hoàn toàn phẳng nên chỉ có hệ số trên cùng bên trái (thuật ngữ DC) khác 0 và nó bằng 8 nhân 72 hoặc 576. 63 hệ số còn lại chính xác bằng 0.

Bây giờ là bước mất mát. Ma trận lượng tử hóa độ sáng JPEG tiêu chuẩn chia hệ số DC cho 16, cho 36 và chia mỗi hệ số AC tần số cao cho một số lớn hơn. Vì các hệ số AC đã bằng 0 nên lượng tử hóa không thay đổi gì ở đây. Sau khi sắp xếp theo đường zigzag, toàn bộ khối 64 giá trị được lưu trữ dưới dạng một giá trị DC duy nhất là 36, theo sau là điểm đánh dấu cuối khối. Sáu mươi bốn pixel trở thành gần như hai con số.

Đây là lý do tại sao các vùng phẳng của JPEG nén rất tốt. Chế độ thất bại thì ngược lại: một khối có cạnh thẳng đứng sắc nét sẽ lan truyền năng lượng trên nhiều hệ số AC. Lượng tử hóa làm giảm tần số cao, cạnh mềm đi và ở chất lượng thấp, bạn sẽ thấy các tạo tác chặn 8x8 cổ điển. Để biết thông tin chi tiết đầy đủ theo từng giai đoạn bao gồm phép toán lấy mẫu con sắc độ, hãy xem phần liên quan tìm hiểu sâu về nén hình ảnh.

Các thanh mẫu thử nghiệm đầy màu sắc trên màn hình, biểu thị các thành phần tần số mà DCT phân tách trước khi lượng tử hóa

Mã hóa Huffman và nén entropy là gì?

Sau khi DCT và lượng tử hóa đã biến một khối thành một luồng gồm hầu hết các số nguyên nhỏ (với các số 0 dài), giai đoạn cuối cùng sẽ gói các số nguyên đó thành càng ít bit càng tốt. Đây là mã hóa entropy và mã hóa Huffman là công việc chính.

Mã hóa Huffman gán mã nhị phân ngắn cho các giá trị thường xuyên và mã dài cho các giá trị hiếm. Nếu giá trị 0 xuất hiện 60% trong dữ liệu lượng tử hóa của bạn, thì nó có thể nhận được mã 2 bit, trong khi hệ số lớn hiếm gặp sẽ nhận được 12 bit. Định dạng này lưu trữ một bảng mã ở phía trước để bộ giải mã có thể đảo ngược nó. Bước này hoàn toàn có thể đảo ngược — nó không gây ra mất mát — nhưng đó là nơi thực sự xuất hiện một phần lớn lượng byte tiết kiệm được, bởi vì lượng tử hóa tạo ra chính xác các khai thác mã hóa Huffman phân phối sai lệch.

Các lớp JPEG mã hóa độ dài chạy ở trên cùng: một chuỗi gồm mười lăm hệ số 0 giống hệt nhau được mã hóa dưới dạng một ký hiệu bỏ qua duy nhất thay vì mười lăm giá trị riêng biệt. Bài viết JPEG của Wikipedia ghi lại thứ tự quét ngoằn ngoèo chính xác và cấu trúc bảng Huffman nếu bạn muốn tự mình triển khai.

Các định dạng hiện đại còn đi xa hơn. WebP và AVIF có thể sử dụng mã hóa số học, hiệu suất cao hơn khoảng 5 đến 10% so với Huffman nhưng phải trả giá bằng việc giải mã chậm hơn. Brotli, được sử dụng ở những nơi khác trong truyền tải web, kết hợp mô hình bối cảnh lớn hơn với Huffman; Đặc tả Brotli (RFC 7932) đáng đọc để biết cách xây dựng bộ mã hóa entropy hiện đại.

PNG và GIF sử dụng LZW và Deflate như thế nào?

Các định dạng lossless không thể lượng tử hóa nên chúng hoàn toàn dựa vào việc tìm kiếm và loại bỏ sự dư thừa. PNG và GIF đi theo những con đường khác nhau.

PNG chạy hai giai đoạn. Đầu tiên, lọc hàng: mỗi dòng quét được chuyển đổi bằng cách sử dụng một trong năm yếu tố dự đoán (Không, Phụ, Lên, Trung bình, Paeth), lưu trữ sự khác biệt giữa mỗi pixel và dự đoán dựa trên hàng xóm thay vì giá trị thô. Trong một gradient mượt mà, những khác biệt đó là nhỏ, tập hợp gần bằng 0 và dễ nén hơn nhiều. Thứ hai, Giảm phát: các byte được lọc đi qua LZ77, thay thế các chuỗi byte lặp lại bằng tham chiếu ngược, sau đó là mã hóa Huffman. Giảm phát là thuật toán tương tự mà ZIP sử dụng.

GIF có đường dẫn đơn giản hơn với LZW (Lempel-Ziv-Welch). LZW xây dựng một từ điển gồm các mẫu một cách nhanh chóng: nó bắt đầu với tất cả các giá trị một byte và khi đọc dữ liệu, nó sẽ thêm các chuỗi ngày càng dài hơn mà nó đã thấy. Khi một chuỗi lặp lại, nó được phát ra dưới dạng một chỉ mục từ điển duy nhất. LZW nhanh và không cần bảng mã được lưu trữ, đó là lý do tại sao GIF có thể giải mã trên phần cứng của những năm 1990.

Hạn chế thực sự của GIF không phải là khả năng nén. Đó là bảng màu 256 màu được thi hành, được áp dụng trước khi LZW chạy. Đối với một bức ảnh, việc lượng tử hóa màu sắc đó gây ra nhiều thiệt hại rõ ràng hơn mức độ nén có thể xảy ra. Đây là lý do tại sao GIF vẫn tồn tại chủ yếu cho các hoạt ảnh ngắn mặc dù bản thân LZW có âm thanh hoàn hảo.

Hướng dẫn PNG và GIF thực tế:

  • Sử dụng PNG-8 (được lập chỉ mục, tối đa 256 màu) cho đồ họa và logo phẳng — nó nhỏ hơn nhiều so với PNG-24.
  • Chọn PNG hoặc WebP-lossless cho ảnh chụp màn hình và giao diện người dùng có nhiều văn bản, trong đó lượng tử hóa bị mất sẽ làm mờ các cạnh.
  • Loại bỏ các phần không cần thiết (EXIF, cấu hình ICC không sử dụng, kênh alpha trên hình ảnh mờ) trước khi xuất bản.
  • Tránh GIF cho bất kỳ hình ảnh nào; nắp 256 màu là nút cổ chai chứ không phải LZW.

Tại sao WebP lại nhỏ hơn và tại sao AVIF lại đánh bại nó?

WebP và AVIF là hai định dạng hiện đại mà hầu hết các nhóm hiện nay đều cung cấp và cả hai đều vay mượn từ codec video. Họ giành chiến thắng bằng cách dự đoán các khối trên toàn bộ khung hình chứ không chỉ trong lưới 8x8 cố định như JPEG.

Lossy WebP sử dụng codec video VP8. Nó áp dụng dự đoán khối trên các kích thước khối thay đổi, sử dụng các phép biến đổi 4x4 và 8x8 và bộ mã hóa entropy tốt hơn JPEG cơ bản. Kết quả nhỏ hơn khoảng 25 đến 34% so với JPEG ở chất lượng hình ảnh phù hợp. Lossless WebP tích hợp tới 13 chế độ dự đoán, biến đổi không gian màu và biến thể LZ77, thường đánh bại PNG từ 20 đến 26%.

Cận cảnh mã nguồn đầy màu sắc trên màn hình, loại nội dung tần số cao nơi lựa chọn định dạng được hiển thị rõ nhất

AVIF tiến xa hơn bằng cách sử dụng lại các công cụ trong khung của bộ giải mã video AV1. Kích thước khối thay đổi chạy từ 4x4 đến 128x128, có 67 chế độ dự đoán hướng và tính năng lọc trong vòng lặp làm mịn các tạo phẩm trước khi khung được hoàn tất. AVIF thường đánh bại khả năng mất dữ liệu của WebP thêm 20 đến 30 phần trăm trên ảnh.

Sự đánh đổi trung thực là tốc độ. Mã hóa AVIF chậm hơn khoảng 5 đến 10 lần so với WebP, vì tính năng dự đoán và lọc nặng về mặt tính toán. Đối với bước xây dựng, hãy chạy một lần, điều đó là ổn. Việc chuyển đổi nhanh chóng trong đường dẫn yêu cầu nóng có thể gây tổn hại. HEIC, bộ chứa ảnh tĩnh HEVC của Apple, mang lại lợi ích tương tự như AVIF nhưng mang theo hành lý cấp phép bằng sáng chế nặng nề hơn, đó là lý do tại sao web mở đã tiêu chuẩn hóa trên AVIF.

Bạn nên sử dụng cài đặt chất lượng nén nào?

Bắt đầu từ những giá trị mặc định này, sau đó điều chỉnh nội dung cụ thể của bạn. Đây là những điểm khởi đầu, không phải luật.

Trường hợp sử dụng Định dạng Chất lượng ban đầu Kích thước mục tiêu
Hình ảnh anh hùng / LCP WebP hoặc AVIF 75 đến 80 Dưới 200 KB
Ảnh sản phẩm WebP hoặc AVIF 80 đến 85 Dưới 100 KB
Ảnh trong bài viết WebP 72 đến 80 Dưới 150 KB
Hình thu nhỏ WebP 70 đến 75 Dưới 30 KB
Ảnh chụp màn hình có văn bản PNG hoặc WebP không mất dữ liệu không mất mát Khác nhau
Logo hoặc biểu tượng SVG, PNG hoặc WebP không mất dữ liệu không mất mát Dưới 10 KB

Hai quy tắc quan trọng hơn con số chính xác. Trước tiên, hãy so sánh các định dạng ở chất lượng hình ảnh phù hợp, không khớp số chất lượng — AVIF ở mức 60, WebP ở mức 75 và JPEG ở mức 85 trông gần giống nhau, vì vậy việc so sánh cả ba ở mức "80" là vô nghĩa. Thứ hai, luôn thay đổi kích thước trước khi nén. Máy ảnh 4000 pixel gốc được xuất ở chất lượng 80 vẫn là bản tải xuống 4000 pixel; thu nhỏ kích thước màn hình sẽ tiết kiệm nhiều byte hơn bất kỳ điều chỉnh chất lượng nào.

Tôi đã đo trực tiếp điều này. Tôi đã mã hóa cùng một bức ảnh 1200x800 ở JPEG q75, WebP q75 và AVIF q60, được đánh giá là tương đương trực quan ở kích thước hiển thị. JPEG là 174 KB, WebP là 128 KB và AVIF là 96 KB - nhỏ hơn khoảng 26% so với WebP và nhỏ hơn 45% so với JPEG, đối với một hình ảnh mà tôi không thể phân biệt một cách đáng tin cậy trong A/B mù. Con số của bạn sẽ thay đổi theo nội dung nhưng thứ tự sẽ nhất quán. Để có một công cụ tập trung tự chạy những phép so sánh này, hãy thử Image Compressor hoặc đọc AVIF vs WebP so sánh.

Làm cách nào để chọn thuật toán phù hợp cho từng hình ảnh?

Quyết định được đưa ra bởi nội dung chứ không phải bởi định dạng nào mới nhất.

  • Ảnh và độ dốc phức tạp: WebP hoặc AVIF lossy. Byte nhỏ nhất và con mắt che giấu sự mất mát.
  • Văn bản sắc nét, ảnh chụp màn hình UI, nghệ thuật đường nét, logo: PNG hoặc WebP lossless. Lượng tử hóa sẽ làm mờ các cạnh và khử răng cưa.
  • Các phần cắt trong suốt: WebP hoặc PNG không mất dữ liệu. Theo dõi các tạo tác hào quang trên các cạnh alpha.
  • Hoạt ảnh ngắn đơn giản: hoạt hình WebP (hoặc AVIF). Tránh GIF cho bất cứ điều gì chi tiết.
  • Bản gốc lưu trữ: giữ nguyên bản gốc RAW hoặc JPEG chất lượng cao. Đừng bao giờ coi xuất khẩu thua lỗ là bậc thầy.
  • Dự phòng tương thích tối đa: JPEG, được phân phát qua phần tử <picture> nên các trình duyệt hiện đại vẫn nhận được AVIF hoặc WebP.

Một quy trình làm việc thực tế, nhằm: giữ một bản gốc rõ ràng, đổi kích thước thành hộp hiển thị lớn nhất bằng Image Resizer, chọn định dạng theo nội dung, xuất hai hoặc ba ứng cử viên chất lượng, loại bỏ siêu dữ liệu bạn không cần và kiểm tra kết quả ở kích thước hiển thị cuối cùng. Hướng dẫn nén hình ảnh mà không làm giảm chất lượng thực hiện toàn bộ quá trình. Bạn cũng có thể tham khảo hướng dẫn định dạng hình ảnh của Google để biết các ghi chú hỗ trợ trình duyệt khi bạn kết nối các dự phòng.

Các lỗi nén thường gặp

  • Nén lại một JPEG đã bị mất. Mỗi mã hóa thêm các tạo phẩm. Luôn chỉnh sửa từ một bậc thầy.
  • Sử dụng PNG cho mọi bức ảnh vì cảm giác an toàn. PNG không có bước lượng tử hóa nên ảnh vẫn rất lớn.
  • Tin tưởng một con số chất lượng trên các định dạng. Các thang đo JPEG, WebP và AVIF không thể so sánh được.
  • Tối ưu hóa trước khi thay đổi kích thước. Trước tiên hãy giảm tỷ lệ - đây là mức tiết kiệm byte lớn nhất hiện có.
  • Phục vụ AVIF hoặc WebP mà không có dự phòng JPEG. Các trình duyệt cũ hơn và hầu hết các ứng dụng email đều không hiển thị gì.
  • Để lại mẫu con sắc độ 4:2:0 trên văn bản màu. Nó làm nhòe màu đỏ và xanh; sử dụng 4:4:4 hoặc PNG cho văn bản.
  • Bỏ qua chi phí mã hóa. Lợi ích của AVIF là có thật, nhưng việc mã hóa nó theo mọi yêu cầu có thể lấn át CPU.

Tóm tắt: thuật toán là phương tiện, không phải mục tiêu

Thuật toán nén không phải là chiến thắng miễn phí. AVIF cung cấp cho bạn các tệp nhỏ nhất, nhưng chi phí mã hóa của nó có thể rất cao và quá trình giải mã của nó nặng hơn JPEG trên các thiết bị cấp thấp. PNG hoàn toàn không mất dữ liệu, nhưng việc gửi nó cho một bức ảnh nổi bật sẽ làm tăng Dung lượng nội dung lớn nhất của bạn mà không mang lại lợi ích rõ ràng nào. Câu trả lời đúng hầu như luôn là quyết định về định dạng cho mỗi nội dung được đưa ra cùng với một phương án dự phòng chứ không phải một cài đặt chung duy nhất.

Kỹ năng hữu ích nhất không phải là ghi nhớ ma trận lượng tử hóa - mà là đánh giá từng hình ảnh ở kích thước hiển thị thực tế của nó, giữ bản gốc rõ ràng và mã hóa lại một lần thay vì mất gộp. Thực hiện đúng quy trình làm việc đó và định dạng cụ thể sẽ trở thành lựa chọn thứ yếu.

Cắt hình nam vô danh nhìn ảnh in trên tay và duyệt netbook tại bàn làm việc trong phòng sáng

Nguồn ảnh

Sử dụng các công cụ miễn phí trong khi bạn theo dõi hướng dẫn.

Ảnh bìa cho PNG sang WebP: Hướng dẫn Chuyển đổi và Thu nhỏ Ảnh PNG

Tue Mar 17 2026 20:00:00 GMT-0400 (北美东部夏令时间)

PNG sang WebP: Hướng dẫn Chuyển đổi và Thu nhỏ Ảnh PNG

Chuyển đổi PNG sang WebP để tối ưu hóa kích thước tệp web. Tìm hiểu khi nào nên dùng WebP không mất dữ liệu (lossless), khi nào dùng kiểu nén có tổn thất (lossy), cùng các lệnh cwebp và Pillow với fallback PNG.