Nén ảnh JPG, PNG, WebP và AVIF online

Tải lên JPG, PNG, WebP hoặc AVIF, kéo thanh trượt chất lượng để xem trước ngay, rồi tải xuống file được mã hóa lại bởi sharp và libvips.

hoặc kéo ảnh vào đây

Giới thiệu công cụ này

Nén JPG, PNG, WebP hoặc AVIF ngay trong trình duyệt với thanh trượt chất lượng trực tiếp và so sánh định dạng. Kéo ảnh vào trang và bản xem trước cập nhật tức thì qua canvas encoder của trình duyệt, mọi thao tác trượt đều cục bộ, không cần mạng. Khi bạn nhấn Tải xuống, file gốc được gửi qua HTTPS đến dịch vụ nén của chúng tôi, một Cloudflare Worker chạy sharp và libvips, cùng stack mã hóa mà Vercel và Shopify dùng. Bản mã hóa server thường tạo ra file nhỏ hơn 10 đến 15 phần trăm so với bản xem trước trong trình duyệt ở cùng mức chất lượng, vì libvips áp dụng tinh chỉnh MozJPEG mà trình duyệt không có. File được giữ trong cache cô lập theo tenant trong thời gian ngắn rồi bị xóa. Công cụ chấp nhận file lên đến 25 MB trên lane server. Phù hợp cho nhiếp ảnh gia, lập trình viên và nhóm sản phẩm cần file nhỏ hơn mà không phải đổi phần mềm.

Nén ảnh
Công cụ này làm gì

Công cụ này làm gì

Trang này chạy một trình nén ảnh hai lane. Thanh trượt phía trên bản xem trước là một encoder cục bộ trực tiếp, chạy canvas.toBlob gốc của trình duyệt với mức chất lượng bạn chọn. Mỗi lần kéo thanh trượt sẽ render lại bản xem trước split-view và cập nhật bộ đếm byte, không phát sinh lưu lượng mạng nào. Khi bạn nhấn Tải xuống, file gốc được gửi đến dịch vụ nén để mã hóa lần cuối bằng sharp và libvips, cùng stack mã hóa mà Vercel và Shopify đang dùng. Đầu ra giữ nguyên kích thước input của bạn. Công cụ hỗ trợ JPG, PNG, WebP và AVIF cho cả input và output ở mọi tổ hợp.

Nén ảnh
Cách nén ảnh từng bước

Cách nén ảnh từng bước

Kéo JPG, PNG, WebP hoặc AVIF vào vùng upload, hoặc dán từ clipboard bằng Ctrl+V. Chọn định dạng đầu ra từ ba thẻ (WebP là mặc định cho ảnh chụp). Kéo thanh trượt chất lượng và quan sát bộ đếm byte cập nhật theo thời gian thực, dừng lại khi kích thước file đạt mức bạn cần và bản xem trước vẫn ổn. Nhấn Tải xuống để nhận kết quả mã hóa từ server. Nếu dịch vụ nén không truy cập được, bản xem trước mã hóa bởi trình duyệt sẽ được lưu thay thế, nên bạn luôn nhận được file hoạt động.

Nén ảnh
Chọn mức chất lượng phù hợp

Chọn mức chất lượng phù hợp

Thanh trượt chất lượng chạy từ 1 đến 100, với 78 là mặc định cho lossy. Mức 80 tương đương với nhãn High mà Adobe Photoshop dùng khi xuất JPEG, là lựa chọn an toàn cho portfolio và sản phẩm giao khách hàng. Mức 60 là mặc định web phổ biến, đưa ảnh 4 MP về khoảng 200 đến 400 KB mà không có tổn thất rõ rệt ở khoảng cách xem thông thường. Dưới 50, các khối artifact bắt đầu xuất hiện trên gradient và tông da. Dưới 30, đầu ra chỉ còn dùng được như thumbnail. Bộ đếm byte phía trên thanh trượt hiển thị kích thước đầu ra chính xác khi bạn kéo, nên không cần đoán mò.

Nén ảnh
Định dạng nào nhỏ nhất: JPG, WebP hay AVIF

Định dạng nào nhỏ nhất: JPG, WebP hay AVIF

Công cụ hiển thị số byte của JPG, WebP và AVIF cạnh nhau trên cùng ảnh nguồn, nên phép so sánh dựa trên file thực của bạn chứ không phải benchmark chung. Theo quy tắc chung, WebP thường nhỏ hơn JPG 25 đến 35 phần trăm ở cùng chất lượng nhìn thấy, và AVIF thường nhỏ hơn JPG 40 đến 60 phần trăm. AVIF mất nhiều thời gian mã hóa hơn, khoảng 3 đến 8 giây cho ảnh 8 MP trên lane server, vì libaom nặng về tính toán. Hỗ trợ trình duyệt cho cả ba định dạng đều mạnh trên Chrome, Firefox, Safari và Edge trong 2026. PNG là lựa chọn đúng khi ảnh có ít màu, ví dụ ảnh màn hình và logo, nơi quantization palette vượt trội codec lossy.

Nén ảnh
File của bạn được xử lý như thế nào

File của bạn được xử lý như thế nào

Bản xem trước thanh trượt không phát sinh mạng. Mỗi lần kéo là một lệnh canvas.toBlob mới trong trình duyệt của bạn, có thể kiểm tra trong DevTools bằng cách lọc tab Network theo compress và xác nhận không có request nào xuất hiện khi bạn di chuyển thanh trượt. Nhấn Tải xuống là bước duy nhất gửi dữ liệu. File của bạn được POST qua HTTPS đến Cloudflare Worker của chúng tôi tại /api/compress, proxy sang backend chạy sharp và libvips. Kết quả mã hóa trả về trong body response và được lưu vào thư mục downloads. Một bản trung gian được giữ trong cache cô lập theo tenant một thời gian ngắn, sau đó xóa. Nếu dịch vụ không truy cập được hoặc file của bạn vượt quá 25 MB, encoder trình duyệt chạy thầm lặng như fallback.

Nén ảnh
Những gì công cụ này không làm

Những gì công cụ này không làm

Không thay đổi kích thước, kích thước đầu ra bằng đầu vào, nên dùng công cụ Resize trước nếu bạn cần giảm số pixel. Không upload hàng loạt, mỗi lần một ảnh, theo thiết kế. Không giữ EXIF, metadata bị tước bởi libvips và sharp ở tầng encoder, đây là lợi thế về quyền riêng tư nhưng cũng có nghĩa là GPS nhúng và dữ liệu camera sẽ mất. Tag hướng hiển thị được đọc và áp dụng trước khi tước, nên đầu ra của bạn vẫn đúng chiều. Không xử lý animation GIF, chỉ khung đầu tiên được xử lý. Không có chế độ target-size, nhưng hai hoặc ba lần điều chỉnh thanh trượt với bộ đếm byte trực tiếp thường đạt mục tiêu trong khoảng 10 phần trăm.

Cách cắt ảnh thành hình tròn

  1. Kéo hoặc dán ảnh của bạn

    Kéo JPG, PNG, WebP hoặc AVIF vào vùng upload, hoặc nhấp để duyệt. Bạn cũng có thể dán từ clipboard bằng Ctrl+V hoặc Cmd+V.

  2. Chọn định dạng đầu ra

    Nhấp JPG, WebP hoặc AVIF để đặt đầu ra. WebP là mặc định và thường nhỏ nhất cho ảnh chụp dùng cho web.

  3. Kéo thanh trượt chất lượng

    Quan sát bộ đếm byte cập nhật khi bạn di chuyển thanh trượt. Dừng lại khi kích thước file đủ nhỏ và bản xem trước vẫn ổn với bạn.

  4. Nhấn Tải xuống

    File gốc được gửi đến server để mã hóa bằng sharp + libvips. File cuối cùng thường nhỏ hơn 10-15% so với bản xem trước trong trình duyệt.

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

Làm thế nào để nén ảnh?

Kéo ảnh của bạn vào trang, rồi kéo thanh trượt chất lượng cho đến khi kích thước file hiển thị trong bộ đếm đạt mục tiêu. Nhấn Tải xuống để nhận kết quả mã hóa từ server (mã hóa bởi sharp + libvips). Toàn bộ quy trình mất chưa đến một phút. Nút download kích hoạt một POST đến dịch vụ nén của chúng tôi, và nếu dịch vụ không truy cập được, bản xem trước mã hóa bởi trình duyệt sẽ được lưu thay thế.

Tại sao nên nén ảnh JPEG?

Một ảnh điện thoại chưa tối ưu thường nặng 4-6 MB. Ở mức chất lượng 78, cùng ảnh đó được MozJPEG mã hóa lại thường còn 800 KB đến 1.5 MB, đủ nhỏ cho tệp đính kèm email, chia sẻ qua WhatsApp và ảnh hero cho web mà không có tổn thất nhìn thấy đáng kể. Ảnh đã nén cũng tải nhanh hơn, cải thiện điểm Core Web Vitals.

Làm sao nén ảnh mà không giảm chất lượng?

Để nén thực sự lossless, hãy chọn PNG làm định dạng đầu ra. Đường PNG dùng pngquant để tối ưu palette, có thể thu nhỏ PNG chưa tối ưu 30-50% mà không có khác biệt nhận thấy. Với định dạng lossy (JPG, WebP, AVIF), chất lượng 80 là ngưỡng thực tế nơi hầu hết người xem không phân biệt được khác biệt, dù kết quả phụ thuộc vào nội dung ảnh.

Tôi có thể nén ảnh xuống kích thước cụ thể như 100 KB không?

Công cụ không có chế độ target-size, nhưng đạt mục tiêu khá đơn giản với bộ đếm byte trực tiếp. Kéo thanh trượt xuống cho đến khi bộ đếm hiển thị mục tiêu của bạn, rồi nhấn Tải xuống. Hai hoặc ba lần điều chỉnh thanh trượt thường đưa bạn đến trong khoảng 10% của bất kỳ kích thước mục tiêu nào. Nếu vượt quá, kéo thanh trượt lên một chút.

Định dạng nào nhỏ nhất: JPG, WebP hay AVIF?

Tùy vào nội dung ảnh. Công cụ hiển thị cả ba đồng thời với bộ đếm byte để bạn so sánh trên file thực. Theo quy tắc chung: WebP thường nhỏ hơn JPG 25-35% ở cùng chất lượng nhìn thấy. AVIF thường nhỏ hơn JPG 40-60%, dù mất thêm vài giây để mã hóa.

Nén ảnh có giảm kích thước của ảnh không?

Không. Kích thước đầu ra giống hệt kích thước đầu vào. Nén chỉ thay đổi mã hóa byte, không phải số pixel. Nếu bạn cũng cần giảm độ phân giải (ví dụ, từ 4000 px ngang xuống 1200 px), hãy dùng công cụ Resize trước, rồi nén file đã thay đổi kích thước. Thứ tự đó cho file cuối nhỏ nhất.

Chi tiết

Ghi chú từ đội ngũ về tay nghề, định dạng và những quyết định nhỏ đằng sau một bản cắt tròn tốt.

Kiến trúc hai lane được giải thích
Bản xem trước thanh trượt và bản mã hóa Tải xuống là hai đường code riêng biệt. Bản xem trước dùng API canvas.toBlob gốc của trình duyệt, chạy đồng bộ trên luồng GPU compositor. Mỗi lần di chuyển thanh trượt kích hoạt một lệnh canvas.toBlob mới với giá trị chất lượng mới, kết quả được vẽ vào canvas split-view. Quá trình này hoàn toàn cục bộ: bạn có thể xác minh bằng cách mở DevTools, tab Network, lọc theo compress, và quan sát, không có request nào trong khi tương tác thanh trượt. Nút Tải xuống kích hoạt một đường code hoàn toàn khác. Nó POST file gốc (chưa sửa đổi) đến Cloudflare Worker của chúng tôi tại /api/compress, proxy đến server Fastify chạy Node 24 và package sharp (giấy phép Apache 2.0) dựa trên libvips 8.x (LGPL-3.0). Kết quả mã hóa trả về trong body response và được lưu vào thư mục download của trình duyệt. Hai đường, một công cụ.
Tại sao mã hóa server thắng mã hóa trình duyệt
Encoder JPEG của trình duyệt dùng libjpeg hoặc một triển khai riêng của trình duyệt thiếu tinh chỉnh bảng chroma subsampling của MozJPEG. MozJPEG, codec mà libvips gọi cho JPEG, được phát triển tại Mozilla năm 2014 như một thay thế drop-in cho libjpeg-turbo, tập trung vào việc tạo ra file nhỏ hơn ở cùng chất lượng nhận thức. Trong benchmark chạy trên 50 ảnh đa dạng (thiên nhiên hoang dã, chân dung, ảnh sản phẩm, ảnh màn hình), bản mã hóa libvips và MozJPEG ở chất lượng 78 tạo ra file nhỏ hơn 10 đến 20 phần trăm so với canvas.toBlob của Chrome ở cùng mức chất lượng. Với PNG, khác biệt lớn hơn: trình duyệt dùng zlib với mức nén mặc định, trong khi pngquant giảm palette màu xuống mức tối thiểu cần thiết, thường cắt giảm PNG chưa tối ưu 30 đến 70 phần trăm.
AVIF: định dạng này là gì và khi nào dùng
AVIF dựa trên dự đoán intra-frame của codec video AV1, được phát triển bởi Alliance for Open Media. Nó đạt hiệu quả nén tốt hơn JPEG bằng cách dự đoán giá trị pixel trên các vùng lớn hơn và biểu diễn phần dư gọn hơn. Kết quả thực tế là file AVIF ở chất lượng 60 thường không phân biệt được với file JPEG ở chất lượng 80, đồng thời nhỏ hơn 40 đến 60 phần trăm. Đánh đổi là thời gian mã hóa: trên server của chúng tôi, ảnh 8 MP ở chất lượng 60 mất 3 đến 8 giây với libaom-av1. Hỗ trợ trình duyệt mạnh tính đến 2026 (Chrome, Firefox, Safari, Edge đều decode AVIF). Công cụ hiển thị bộ đếm byte AVIF theo thời gian thực cạnh JPG và WebP để bạn quyết định liệu tiết kiệm kích thước có xứng đáng với độ trễ mã hóa cho quy trình của bạn không.
Cài đặt chất lượng trong thực tế
Thanh trượt ánh xạ trực tiếp đến tham số q của encoder cho định dạng lossy. Ở chất lượng 80, cài đặt khớp với nhãn High mà Adobe Photoshop dùng khi xuất JPEG, là mặc định mà hầu hết quy trình chuyên nghiệp dùng. Ở chất lượng 60, một ảnh 4 MP trung bình nén xuống khoảng 200 đến 400 KB, đủ nhỏ cho hầu hết email và web, và tổn thất chi tiết chỉ thấy được ở vùng chi tiết mịn khi zoom 1:1. Dưới chất lượng 50, các artifact nén dạng khối bắt đầu xuất hiện trên gradient mượt và tông da, nhận thấy ngay cả ở khoảng cách xem thông thường trên màn hình retina. Dưới chất lượng 30, đầu ra có thể nhận ra nhưng rõ ràng đã bị nén, chỉ phù hợp cho thumbnail. Bộ đếm byte phía trên thanh trượt hiển thị kích thước đầu ra chính xác bằng KB khi bạn kéo, không phải ước tính.
Tước metadata và tại sao điều đó quan trọng
Cả hai lane đều tước EXIF, GPS và metadata camera khỏi đầu ra theo mặc định. Đây là hành vi đúng của libvips và sharp trong cấu hình mặc định, và có hai tác dụng thực tế. Thứ nhất, nó loại bỏ dữ liệu vị trí nhạy cảm tiềm tàng được camera smartphone nhúng, là lợi ích về quyền riêng tư cho ảnh chia sẻ công khai. Thứ hai, nó giảm nhẹ kích thước file (một khối EXIF điển hình nặng 10 đến 40 KB). Tag hướng hiển thị được xử lý riêng: công cụ đọc trường orientation EXIF trước khi tước và xoay trước ảnh để đầu ra được định hướng đúng. Nếu bạn cần giữ metadata cho quy trình điều tra, lưu trữ hoặc in ấn, nên dùng một trình chỉnh sửa metadata chuyên dụng trước khi nén.
Định dạng được hỗ trợ: đầu vào và đầu ra
Đầu vào nhận JPG, PNG, WebP và AVIF trên mọi trình duyệt hiện đại, xác thực bằng magic-byte sniff thay vì chỉ dựa vào phần mở rộng file. GIF được chấp nhận trên Chrome và Firefox nhưng chỉ khung đầu tiên được xử lý (animation không được giữ), nên GIF động không nên nén bằng công cụ này. HEIC từ iPhone hoạt động trong Safari, có decoder HEIC tích hợp sẵn, nhưng Chrome và Firefox không decode HEIC nguyên bản. Đầu ra có thể là JPG, PNG, WebP hoặc AVIF bất kể định dạng đầu vào, nên bạn cũng có thể dùng công cụ này như một đường convert-và-nén một bước. Lane server chấp nhận file lên đến 25 MB. File vượt giới hạn đó được xử lý bởi encoder fallback của trình duyệt thay thế.