Vì sao tệp PNG nặng ngay từ đầu
PNG là định dạng lossless: mọi điểm ảnh được lưu chính xác, và cách tiết kiệm duy nhất đến từ một bộ nén đa dụng tương tự ZIP. Một tệp PNG điển hình từ công cụ chụp màn hình hay ứng dụng thiết kế được lưu ở dạng truecolour kèm kênh alpha, tức 4 byte cho mỗi điểm ảnh trước khi nén. Một ảnh chụp màn hình 1920×1080 có khoảng 8 MB dữ liệu điểm ảnh thô, và ngay cả sau khi nén thường vẫn rơi vào khoảng 1 đến 3 MB.
Phần lớn thông tin đó không được dùng đến. Ảnh chụp màn hình một trang web có thể chỉ chứa vài trăm màu khác nhau. Một logo có thể có chừng chục màu, cộng thêm các sắc độ khử răng cưa dọc theo viền. Lưu mỗi điểm ảnh bằng một giá trị 32 bit đầy đủ là quá thừa cho loại ảnh đó, và đây chính là khoảng trống mà công cụ này tận dụng.
Lượng tử hóa bảng màu hoạt động thế nào
Thay vì lưu một màu cho mỗi điểm ảnh, PNG dạng indexed giữ một bảng màu tối đa 256 màu và lưu mỗi điểm ảnh bằng một byte trỏ vào bảng đó. Công việc nằm ở việc chọn bảng màu. Công cụ liên tục chia các màu của ảnh thành từng nhóm theo hướng mà chúng khác nhau nhiều nhất, cho đến khi có số nhóm bằng mức bạn chọn, rồi dùng giá trị trung bình của mỗi nhóm làm một mục trong bảng màu. Sau đó mỗi điểm ảnh được ánh xạ đến mục gần nhất.
Độ trong suốt là một phần của cùng quá trình: mỗi mục trong bảng màu mang giá trị alpha riêng, nên một bóng đổ mềm hay viền khử răng cưa trên nền trong suốt được giữ lại dưới dạng vài màu bán trong suốt trong bảng màu thay vì bị cắt cứng.
Ba nút đặt kích thước bảng màu:
- Cao · 256: số màu tối đa mà một PNG dạng bảng màu chứa được. Biểu tượng, logo, ảnh chụp giao diện và sơ đồ thường trông giống hệt bản gốc.
- Vừa · 128: vẫn sạch với đồ họa phẳng và hình minh họa có bộ màu hạn chế. Đáng thử với ảnh chụp màn hình giao diện.
- Thấp · 64: cho tác phẩm đơn giản như biểu đồ, hình vẽ nét và biểu tượng ít màu. Các dải chuyển tinh tế bắt đầu lộ ra bậc thang.
Sau đó ảnh được ghi ra bằng cơ chế nén chuẩn của PNG và giữ nguyên tên tệp gốc.
Ảnh nào phù hợp, ảnh nào không
Lượng tử hóa phát huy tốt nhất với nội dung được tạo bằng kỹ thuật số:
- Ảnh chụp màn hình ứng dụng và trang web, nhất là những ảnh có vùng màu phẳng lớn.
- Logo, biểu tượng và huy hiệu có độ trong suốt.
- Biểu đồ, sơ đồ, bản đồ và bản mô phỏng giao diện.
- Pixel art, thường còn nguyên vẹn ngay cả ở mức Thấp.
Nó gặp khó với dải chuyển màu mượt và ảnh chụp. Công cụ ánh xạ mỗi điểm ảnh đến màu gần nhất trong bảng màu mà không dùng dithering, nên bầu trời hay hiệu ứng tối viền mềm vốn cần hàng nghìn sắc độ sẽ biến thành các dải màu nhìn thấy rõ. Với ảnh chụp, định dạng nén mất dữ liệu làm tốt hơn: hãy đưa chúng qua chuyển PNG sang JPG nếu không cần độ trong suốt, hoặc giữ độ trong suốt với chuyển PNG sang WebP.
Kiểm tra kết quả
Mỗi dòng tệp hiển thị dung lượng gốc và dung lượng mới cạnh nhau. Nếu lượng tử hóa không thể làm tệp nhỏ hơn, công cụ trả lại bản gốc nguyên vẹn và dòng tệp ghi rằng bản gốc được giữ nguyên. Điều này xảy ra với PNG vốn đã ở dạng indexed hoặc đã được công cụ khác tối ưu mạnh, và với ảnh chứa đầy nhiễu mịn.
Để đánh giá chất lượng, hãy mở bản gốc và kết quả cạnh nhau trong so sánh hai hình ảnh rồi kéo thanh trượt qua các dải chuyển màu và đường viền. Nếu thấy hiện tượng phân dải, hãy tăng lên một mức; nếu Vừa trông giống hệt Cao, hãy lấy tệp nhỏ hơn.
Ghi chú thực tế
- Các khối văn bản và siêu dữ liệu của bản gốc, như phần mềm tạo ảnh hay chú thích nhúng, không được giữ lại, vì ảnh được giải mã và ghi lại từ đầu. Tệp được trả lại không đổi do không thể làm nhỏ hơn thì vẫn giữ chúng.
- Chỉ nhận đầu vào PNG. Tệp đến 50 MB mỗi tệp đều được, nhưng ảnh rất lớn mất nhiều thời gian hơn: mọi điểm ảnh phải được phân tích để dựng bảng màu, nên một ảnh PNG 6000×4000 có thể lâu hơn hẳn một ảnh chụp màn hình.
- Việc xử lý diễn ra trong một worker chạy nền trong trình duyệt khi được hỗ trợ. Không có gì được tải lên, và một loạt tệp có thể được tải về dưới dạng một tệp ZIP duy nhất.
- Thu nhỏ kích thước trước thường quan trọng hơn bảng màu. Một ảnh chụp màn hình retina 2× được đưa về kích thước hiển thị chỉ còn một phần tư số điểm ảnh trước khi lượng tử hóa bắt đầu.