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

Cách nén ảnh JPEG mà không làm mất chất lượng rõ rệt

Nén JPEG cho web đúng cách: điều chỉnh chất lượng theo mắt người nhìn, thay đổi kích thước trước, sử dụng progressive encoding, và tránh nén lại để đạt kích thước tối ưu.

Cách nén ảnh JPEG mà không làm mất chất lượng rõ rệt

Last updated: June 27, 2026

JPEG vẫn là định dạng ảnh phổ biến nhất, và hầu hết các JPEG trên web đều lớn hơn mức cần thiết. Việc nén chúng tốt không chỉ đơn thuần là kéo thanh trượt đến một con số — mà là việc căn chỉnh chất lượng với những gì mắt người thực sự nhìn thấy ở kích thước hiển thị, thay đổi kích thước trước, và mã hóa một lần duy nhất. Hướng dẫn này sẽ đề cập đến các cài đặt thực tế, các công cụ, và kích thước file được đo lường trên một bức ảnh chụp thật.

Câu trả lời nhanh: làm thế nào để nén JPEG?

Thay đổi kích thước nó về kích thước hiển thị, sau đó tái mã hóa ở chất lượng 80–85 với mã hóa progressive và loại bỏ metadata. Đối với một bức ảnh điển hình có tỉ lệ cắt khoảng 70–90% mà không mất chi tiết nào khi xem bình thường. Để đạt kết quả web nhỏ nhất, hãy chuyển sang WebP hoặc AVIF sau khi thay đổi kích thước — nhưng vẫn giữ lại fallback JPEG.

Bước Lý do Công cụ
Thay đổi kích thước về kích thước hiển thị Tiết kiệm byte lớn nhất Image Resizer
Tái mã hóa JPEG ở q80–85 Loại bỏ phần dư thừa, mất mát gần như vô hình Image Compressor
Mã hóa progressive Tải dần, tốc độ cảm nhận tốt hơn optimize=True, progressive=True
Loại bỏ metadata Xóa các byte EXIF/XMP -strip
(Tùy chọn) WebP/AVIF Còn nhỏ hơn cho trình duyệt hiện đại Image Converter

Quá trình nén JPEG hoạt động như thế nào?

JPEG chia hình ảnh thành các khối pixel 8×8, biến đổi từng khối thành tần số, sau đó lượng tử hóa — nó chia các hệ số tần số cao (chi tiết mịn) bằng các số lớn khiến nhiều giá trị làm tròn về zero. Thanh trượt chất lượng điều chỉnh ma trận lượng tử hóa này: chất lượng thấp hơn có nghĩa là bộ chia lớn hơn, nhiều số zero hơn, file nhỏ hơn, và chi tiết bị loại bỏ nhiều hơn. Các số zero sau đó được mã run-length và Huffman vào các byte cuối cùng.

Đây là lý do tại sao JPEG làm mờ văn bản và các cạnh sắc nét: chi tiết mịn nằm trong các hệ số tần số cao mà quá trình lượng tử hóa đã làm bằng zero. Đẩy chất lượng xuống đủ thấp và bạn sẽ thấy hiện tượng khối 8×8, có thể nhìn thấy ở bảng q50 phía trên. Để xem toàn bộ thuật toán hoạt động, hãy xem cách nén ảnh hoạt động.

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

Hãy so sánh theo chất lượng có thể nhìn thấy, chứ không phải con số. JPEG q85, WebP q75 và AVIF q60 trông tương đối giống nhau. Được đo trên một ảnh cắt chi tiết lông vũ, kích thước JPEG giảm mạnh lúc đầu rồi phẳng ra:

Biểu đồ cột về kích thước JPEG được đo theo chất lượng: q95 lớn nhất, giảm qua q85, q75, q65, q50 — điểm lý tưởng là q75-85

Các dải thực tế:

Chất lượng File (tương đối) Mất mát có thể nhìn thấy Sử dụng cho
90–95 Lớn nhất Không Ảnh master in ấn, lưu trữ
80–85 ~15–25% so với bản gốc Không ở khoảng cách xem Ảnh web (mặc định)
70–75 Nhỏ hơn Tối thiểu, ở các khu vực mịn Ảnh thu nhỏ (Thumbnails)
50–65 Nhỏ nhất Khối rõ ràng Tránh cho bất cứ thứ gì nổi bật

Hãy bắt đầu từ 85 và chỉ giảm xuống 80 hoặc 75 nếu bạn cần dung lượng byte. Dưới 70, các hiện tượng nhiễu (artifacts) sẽ gây mất tập trung.

Phương pháp 1: Compressor trình duyệt

Đối với một ảnh, hãy sử dụng Imagic AI Image Compressor: tải lên, thay đổi kích thước về chiều rộng hiển thị, đặt chất lượng JPEG là 85, bật progressive, và tải xuống. Để kiểm soát trực quan thời gian thực, Squoosh hiển thị kích thước đầu ra và bản xem trước cạnh nhau khi bạn di chuyển thanh trượt.

Phương pháp 2: Dòng lệnh (Command line)

Đối với một thư mục, các bộ mã hóa dòng lệnh là nhanh nhất và có thể lập kịch bản.

## ImageMagick: thay đổi kích thước, q85, progressive, loại bỏ metadata, ghi vào out/
mkdir -p out
mogrify -path out -resize 1920x -quality 85 -strip -interlace Plane *.jpg

## jpegoptim: tái tối ưu hóa không mất dữ liệu, hoặc đặt chất lượng tối đa
jpegoptim --max=85 --strip-all --all-progressive *.jpg

## mozjpeg (nén tốt hơn libjpeg ở cùng chất lượng)
cjpeg -quality 85 -progressive input.ppm > output.jpg

mozjpeg tạo ra các file nhỏ hơn so với libjpeg tiêu chuẩn ở cùng chất lượng hình ảnh, vì vậy nó là lựa chọn tốt nhất khi bạn có thể cài đặt nó. jpegoptim tiện lợi vì nó có thể nén lại tại chỗ không mất dữ liệu lên đến giới hạn chất lượng.

Phương pháp 3: Python

from PIL import Image
from pathlib import Path

def compress_jpeg(src: Path, dest: Path, quality: int = 85, max_width: int = 1920):
    with Image.open(src) as img:
        if img.mode != "RGB":
            img = img.convert("RGB")
        if img.width > max_width:
            ratio = max_width / img.width
            img = img.resize((max_width, int(img.height * ratio)), Image.LANCZOS)
        img.save(dest, "JPEG", quality=quality, optimize=True, progressive=True)

for f in Path("photos").glob("*.jpg"):
    compress_jpeg(f, Path("out") / f.name)

optimize=True xây dựng các bảng Huffman tối ưu (file nhỏ hơn, mã hóa chậm hơn); progressive=True ghi một JPEG progressive.

Bạn có nên sử dụng JPEG progressive không?

Có, đối với hình ảnh web trên phần hiển thị đầu tiên (above-the-fold). Một JPEG progressive tải theo các lần đi qua từ thô đến mịn, vì vậy người xem sẽ thấy phiên bản chi tiết thấp toàn khung gần như ngay lập tức thay vì kiểu xóa từ trên xuống dưới. Cùng byte dữ liệu, tốc độ cảm nhận tốt hơn. Sự đánh đổi là mã hóa chậm hơn một chút, điều này không quan trọng nếu bạn chỉ mã hóa một lần khi tải lên.

Nén hay thay đổi kích thước — cái nào quan trọng hơn?

Cả hai đều giảm dung lượng, nhưng hãy thay đổi kích thước trước. Nén loại bỏ chi tiết trên mỗi pixel; thay đổi kích thước loại bỏ các pixel mà bạn không hiển thị. Một ảnh 4000px được nén về q85 vẫn là một bản tải xuống 4000px được hiển thị ở 800px. Thay đổi kích thước về kích thước hiển thị trước sẽ tiết kiệm nhiều byte hơn bất kỳ điều chỉnh chất lượng nào, như hướng dẫn thay đổi kích thước hàng loạt đã chứng minh.

Chi tiết nguồn bên cạnh kết quả web sẵn sàng ở q85: ở kích thước hiển thị thì phiên bản nén không thể phân biệt được

Thứ tự khuyến nghị cho mọi hình ảnh: thay đổi kích thước về kích thước hiển thị → nén về q85 → loại bỏ metadata → phục vụ. Để có kết quả nhỏ nhất, cũng xuất WebP/AVIF và phục vụ qua <picture> với JPEG là fallback.

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

  • Tái nén một JPEG đã được nén. Mỗi lần mã hóa mất dữ liệu đều thêm các hiện tượng nhiễu; file thậm chí có thể lớn hơn. Hãy làm việc từ bản master gốc.
  • Nén quá mức để đạt mục tiêu dung lượng. Dưới q70, khối (blocking) gây mất tập trung. Thay vào đó hãy thay đổi kích thước nhỏ hơn thay vì giảm chất lượng thêm nữa.
  • Lưu PNG cho ảnh chụp. PNG là lossless và rất lớn đối với ảnh chụp. Hãy sử dụng JPEG (hoặc WebP) cho ảnh chụp, PNG cho đồ họa/văn bản.
  • Loại bỏ EXIF khi bạn cần. Giữ lại nó cho kho lưu trữ ảnh; loại bỏ nó cho web công cộng.
  • Quên chuyển đổi định dạng. WebP và AVIF nhỏ hơn 25–50% so với JPEG ở cùng chất lượng. Xem so sánh định dạng.

Danh sách kiểm tra trước khi xuất cuối cùng

  • Thay đổi kích thước về chiều rộng hiển thị trước khi nén JPEG.
  • Giữ file gốc bên ngoài thư mục đầu ra.
  • Sử dụng JPEG progressive cho ảnh web lớn.
  • Tránh lưu lại cùng một JPEG nhiều lần.
  • So sánh hình ảnh cuối cùng ở kích thước bình thường và 100%.

Các câu hỏi thường gặp

Nén JPEG có làm giảm chất lượng không?

Có — JPEG luôn là lossy (mất dữ liệu). Nhưng ở q80–85, sự mất mát này là vô hình ở khoảng cách xem bình thường, và file thường nhỏ hơn 75–90% so với bản gốc.

Chất lượng JPEG nào tốt nhất cho web?

80–85. Đây là dải mà kích thước nhỏ và mức độ mất dữ liệu không thể nhìn thấy. Giảm xuống 75 cho ảnh thu nhỏ, không bao giờ dưới 70 đối với bất cứ thứ gì nổi bật.

Tôi có thể nén một JPEG đã được nén không?

Bạn có thể, nhưng tiết kiệm rất ít và bạn thêm các hiện tượng nhiễu. Chỉ tái nén từ bản master chất lượng cao.

Nên dùng JPEG hay WebP cho ảnh chụp?

WebP nhỏ hơn ở cùng chất lượng, vì vậy hãy ưu tiên nó cho các trang web hiện đại — với fallback JPEG trong <picture>. Giữ JPEG cho email và các client cũ. Hướng dẫn TinyPNG alternatives liệt kê các công cụ xuất cả hai định dạng này.

Tôi nên sử dụng chất lượng nào cho JPEG?

Chất lượng 80–85 để phân phối web (mất dữ liệu vô hình ở kích thước xem, khoảng một phần tư byte của chất lượng 100). Chỉ sử dụng 90–95 cho bản in hoặc ảnh cắt sẽ được kiểm tra kỹ. Dưới 75, hiện tượng banding và nhiễu xuất hiện trong các gradient mịn như bầu trời. Hãy nén một lần ở chất lượng mục tiêu từ bản master không mất dữ liệu.

Mất mát thế hệ (generation loss) là gì?

Mỗi khi bạn lưu lại JPEG, nó áp dụng thêm một vòng nén lossy khác, và các hiện tượng nhiễu tích tụ — hình ảnh dần mất chi tiết và tăng khối (blocking). Tránh điều này bằng cách chỉnh sửa ở định dạng không mất dữ liệu (TIFF, PNG, hoặc RAW) và xuất JPEG chỉ một lần cuối cùng. Không bao giờ mở, chỉnh sửa, và lưu lại JPEG nhiều lần.

Tôi có nên chuyển đổi JPEG sang WebP?

Đối với phân phối web, có — WebP nhỏ hơn 25 đến 35 phần trăm ở cùng chất lượng và được hỗ trợ trong tất cả các trình duyệt hiện tại. Chỉ giữ JPEG làm fallback cho các trình duyệt rất cũ. Phục vụ WebP thông qua phần tử <picture> với fallback JPEG. Xem hướng dẫn chuyển đổi WebP.

JPEG progressive là gì?

Một JPEG tải theo các lần đi qua — ban đầu là xem trước toàn ảnh mờ, sau đó dần sắc nét hơn — thay vì từ trên xuống dưới. Nó cải thiện tốc độ tải cảm nhận trên các kết nối chậm, bởi vì người xem thấy toàn bộ hình ảnh sớm. Hầu hết các encoder đều có thể ghi JPEG progressive mà không tốn dung lượng; hãy bật nó cho các ảnh web trên phần hiển thị đầu tiên (above-the-fold).

Chroma subsampling là gì?

Một kỹ thuật JPEG lưu trữ chi tiết màu ở độ phân giải thấp hơn so với chi tiết độ sáng, bởi vì mắt người nhạy cảm hơn với độ sáng hơn là màu sắc chính xác. Nó thu nhỏ file mà ít mất mát có thể nhìn thấy. Hầu hết các encoder áp dụng nó theo mặc định ở chất lượng 80 và dưới; chỉ tắt nó đối với đồ họa nghệ thuật hoặc màu phẳng nơi độ trung thực của màu sắc là rất quan trọng.

JPEG có hỗ trợ tính trong suốt (transparency) không?

Không — JPEG không có kênh alpha, vì vậy một hình ảnh trong suốt sẽ nhận được nền cưỡng bức (thường là trắng) khi xuất JPEG. Hãy sử dụng PNG hoặc WebP cho tính trong suốt, và dành JPEG cho ảnh chụp. Xem hướng dẫn ảnh trong suốt.

Ảnh cận cảnh tâm trạng của ống kính Canon 24mm và 18-55mm dưới ánh sáng rực rỡ.

Image credits

  • Thang chất lượng JPEG, trước/sau, và biểu đồ kích thước theo chất lượng — được tác giả tạo từ một bức ảnh lông vẹt (Pexels #36720663, photo by Kaca Skok) để thể hiện kết quả đầu ra JPEG thực tế qua các mức chất lượng.

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.