Mã hoá không tổn hao và minh bạch trong WebP

Tiến sĩ Jyrki Alakuijala, Google, Inc.
Vincent Rabaud, Ph.D., Google, Inc.
Lần cập nhật gần đây nhất: ngày 1 tháng 8 năm 2017

Abstract – Chúng tôi so sánh việc sử dụng tài nguyên của bộ mã hoá/bộ giải mã WebP với mức sử dụng tài nguyên của PNG ở cả chế độ không tổn hao và có tổn hao. Chúng tôi sử dụng tập hợp 12.000 hình ảnh PNG trong suốt được chọn ngẫu nhiên trên web và các phép đo đơn giản hơn để cho thấy sự thay đổi về hiệu suất. Chúng tôi đã nén lại các tệp PNG trong kho nội dung của mình để so sánh hình ảnh WebP với tệp PNG được tối ưu hoá kích thước. Trong kết quả, chúng tôi cho thấy WebP là một giải pháp thay thế tốt cho PNG để sử dụng trên web về cả kích thước và tốc độ xử lý.

Giới thiệu

WebP hỗ trợ hình ảnh mờ và không tổn hao, giúp định dạng này trở thành một định dạng thay thế cho định dạng PNG. Nhiều kỹ thuật cơ bản dùng trong quá trình nén PNG, chẳng hạn như mã hoá từ điển, mã hoá Huffman và biến đổi lập chỉ mục màu cũng được hỗ trợ trong WebP, dẫn đến tốc độ và mật độ nén tương tự trong trường hợp xấu nhất. Đồng thời, một số tính năng mới – chẳng hạn như mã entropy riêng biệt cho các kênh màu khác nhau, vị trí 2D của khoảng cách tham chiếu ngược và bộ nhớ đệm màu của các màu được sử dụng gần đây – cho phép cải thiện mật độ nén với hầu hết hình ảnh.

Trong công việc này, chúng tôi so sánh hiệu suất của WebP với PNG được nén mạnh bằng pngcrush và ZopfliPNG. Chúng tôi đã nén lại tập sao lục tham chiếu về hình ảnh trên web bằng các phương pháp hay nhất và so sánh cả tập hợp tệp WebP không mất dữ liệu và có tổn hao với tập sao lục này. Ngoài tập hợp tệp tham chiếu, chúng tôi còn chọn 2 hình ảnh lớn hơn, một hình ảnh và một hình ảnh đồ hoạ, để đo điểm chuẩn về tốc độ và mức sử dụng bộ nhớ.

Tốc độ giải mã nhanh hơn PNG đã cho thấy, cũng như nén có khả năng nén mật độ 23% so với định dạng PNG hiện nay. Chúng tôi kết luận rằng WebP là một giải pháp thay thế hiệu quả hơn cho định dạng hình ảnh PNG hiện nay. Ngoài ra, tính năng nén hình ảnh có tổn hao với khả năng hỗ trợ alpha không tổn hao giúp tăng tốc độ trang web.

Phương thức

Công cụ dòng lệnh

Chúng tôi sử dụng các công cụ dòng lệnh sau để đo lường hiệu suất:

  1. cwebp và dwebp. Các công cụ này thuộc thư viện libwebp (được biên dịch từ đầu).

  2. chuyển đổi. Đây là một phần công cụ dòng lệnh của phần mềm ImageMagick (6.7.7-10/07/2017).

  3. pngcrush 1.8.12 (30 tháng 7 2017)

  4. ZopfliPNG (Ngày 17 tháng 7 năm 2017)

Chúng tôi sử dụng các công cụ dòng lệnh với cờ điều khiển tương ứng. Ví dụ: nếu chúng tôi đề cập đến cwebp -q 1 -m 0, điều đó có nghĩa là công cụ cwebp đã được gợi lên với các cờ -q 1 và -m 0.

Hình ảnh Corpora

Ba tập hợp văn được chọn:

  1. Một ảnh chụp (Hình 1),

  2. Một hình ảnh đồ hoạ có độ trong suốt (Hình 2) và

  3. Tập tài liệu trên web: 12.000 hình ảnh PNG được chọn ngẫu nhiên, có độ trong suốt hoặc không trong suốt, được thu thập thông tin từ Internet. Những hình ảnh PNG này được tối ưu hoá thông qua lệnh chuyển đổi, pngcrush, ZopfliPNG và phiên bản nhỏ nhất của mỗi hình ảnh được xem xét cho nghiên cứu.

Hình 1. Ảnh chụp, 1024 x 752 pixel. Hơi thở lửa "Ban nhạc Jaipur Maharaja Brass" Chassepierre Bỉ, Tác giả: Luc Viatour, Ảnh được cấp phép theo giấy phép Creative Commons Attribution-Share Alike 3.0 Unported (Không chuyển đổi). Trang web của tác giả tại đây.

Hình 2. Hình ảnh đồ họa, 1024 x 752 pixel. Ảnh ghép từ Công cụ của Google Chart

Để đo lường đầy đủ chức năng của định dạng hiện có, chúng tôi đã nén lại tất cả các hình ảnh PNG gốc này bằng một số phương pháp:

  1. Kẹp đến 8 bit mỗi thành phần: chuyển đổi input.png -height 8 output.png

  2. ImageMagick(1) không có công cụ dự đoán: conversion input.png -quality 90 output-candidate.png

  3. ImageMagick với công cụ dự đoán thích ứng: chuyển đổi input.png -quality 95 output-candidate.png

  4. Pngcrush(2): pngcrush -brute -rem tEXt -rem tIME -rem iTXt -rem zTXt -rem gAMA -rem cHRM -rem iCCP -rem sRGB -rem alla -rem text input.png output-candi

  5. ZopfliPNG(3): zopflipng --lossy_transparency input.png output-candidate.png

  6. ZopfliPNG với tất cả các bộ lọc: zopflipng --iterations=500 --filter=01234mepb --lossy_8bit --lossy_transparency input.png output-candidate.png

Kết quả

Chúng tôi đã tính toán mật độ nén cho từng hình ảnh trong tập sao lục trên web, tương ứng với kích thước hình ảnh PNG được tối ưu hoá cho 3 phương thức:

  1. WebP không tổn hao (chế độ cài đặt mặc định)

  2. WebP không tổn hao với kích thước nhỏ nhất (-m 6 -q 100)

  3. tốt nhất về định dạng WebP không suy hao và WebP có tổn hao WebP với alpha (chế độ cài đặt mặc định).

Chúng ta đã sắp xếp các hệ số nén này và vẽ biểu đồ trong Hình 3.

Hình 3. Mật độ nén PNG được dùng làm tệp tham chiếu, ở mức 1.0. Các hình ảnh tương tự được nén bằng cả phương thức không tổn hao và có tổn hao. Đối với mỗi hình ảnh, tỷ lệ kích thước so với PNG nén sẽ được tính toán và tỷ lệ kích thước được sắp xếp và hiển thị cho cả nén không tổn hao và có tổn hao. Đối với đường cong nén có tổn hao, phương pháp nén không tổn hao được chọn trong những trường hợp tạo ra hình ảnh WebP nhỏ hơn.

WebP vượt quá mật độ nén PNG cho cả libpng ở chất lượng tối đa (chuyển đổi) cũng như ZopfliPNG (Bảng 1), với tốc độ mã hoá (Bảng 2) và tốc độ giải mã (Bảng 3) gần tương đương với tốc độ của PNG.

Bảng 1. Số bit trung bình trên mỗi pixel cho 3 tập sao lục bằng cách sử dụng các phương thức nén khác nhau.

Tập hợp hình ảnh chuyển đổi -chất lượng 95 ZopfliPNG WebP không tổn hao -q 0 -m 1 WebP không tổn hao (chế độ cài đặt mặc định) WebP không tổn hao -m 6 -q 100 Có tổn hao WebP với phiên bản alpha
ảnh 12.3 12.2 10.5 10.1 9.83 0.81
phản cảm 1.36 1,05 0.88 0.71 0,70 0,51
web 6.85 5.05 4.42 4.04 3.96 1.92

Bảng 2. Thời gian mã hoá trung bình cho các tập sao chép nén và cho các phương thức nén khác nhau.

Tập hợp hình ảnh chuyển đổi -chất lượng 95 ZopfliPNG WebP không tổn hao -q 0 -m 1 WebP không tổn hao (chế độ cài đặt mặc định) WebP không tổn hao -m 6 -q 100 Có tổn hao WebP với phiên bản alpha
ảnh 0,500 giây 8,7 giây 0,293 giây 0,780 giây 8,440 giây 0,111 giây
phản cảm 0,179 giây 14 giây 0,065 giây 0,140 giây 3,510 giây 0,184 giây
web 0,040 giây 1,55 giây 0,017 giây 0,072 giây 2,454 giây 0,020 giây

Bảng 3. Thời gian giải mã trung bình cho 3 tập sao lục cho các tệp hình ảnh được nén bằng các phương thức và chế độ cài đặt khác nhau.

Tập hợp hình ảnh chuyển đổi -chất lượng 95 ZopfliPNG WebP không tổn hao -q 0 -m 1 WebP không tổn hao (chế độ cài đặt mặc định) WebP không tổn hao -m 6 -q 100 Có tổn hao WebP với phiên bản alpha
ảnh 0,027 giây 0,026 giây 0,027 giây 0,026 giây 0,027 0,012 giây
Đồ hoạ 0,049 giây 0,015 giây 0,005 giây 0,005 giây 0.003 0,010 giây
web 0,007 giây 0,005 giây 0,003 giây 0,003 giây 0.003 0,003 giây

Phân tích bộ nhớ

Đối với quá trình phân tích bộ nhớ, chúng tôi đã ghi lại kích thước cài đặt thường trú tối đa như được báo cáo bởi /usr/bin/time -v

Đối với tập sao dữ liệu web, chỉ kích thước của hình ảnh lớn nhất sẽ xác định mức sử dụng bộ nhớ tối đa. Để xác định rõ hơn hoạt động đo lường bộ nhớ, chúng tôi sử dụng một hình ảnh duy nhất (Hình 1) để cung cấp thông tin tổng quan về mức sử dụng bộ nhớ. Hình ảnh đồ họa cho kết quả tương tự.

Chúng tôi đã đo lường 10 đến 19 MiB cho libpng và ZopfliPNG, và 25 MiB và 32 MiB cho mã hoá không tổn hao WebP ở chế độ cài đặt -q 0 -m 1 và -q 95 (với giá trị mặc định là -m).

Trong một thử nghiệm giải mã, lệnh conversion -resize 1x1 sử dụng 10 MiB cho cả tệp PNG do libpng và ZopfliPNG tạo. Khi sử dụng cwebp, tính năng giải mã không tổn hao WebP sử dụng 7 MiB và giải mã có tổn hao 3 MiB.

Kết luận

Chúng tôi đã chỉ ra rằng cả tốc độ mã hoá và giải mã đều thuộc cùng một miền với tốc độ của PNG. Mức sử dụng bộ nhớ tăng lên trong giai đoạn mã hoá, nhưng giai đoạn giải mã lại cho thấy sự sụt giảm đáng kể, ít nhất là khi so sánh hành vi của cwebp với hành vi của ImageMagick.

Mật độ nén phù hợp hơn với hơn 99% hình ảnh trên web, cho thấy rằng một người có thể tương đối dễ dàng thay đổi từ PNG sang WebP.

Khi chạy với chế độ cài đặt mặc định, WebP sẽ nén tốt hơn 42% so với libpng và tốt hơn 23% so với ZopfliPNG. Điều này cho thấy WebP hứa hẹn sẽ tăng tốc các trang web có hình ảnh nặng.

Tài liệu tham khảo

  1. ImageMagick

  2. Pngcrush

  3. ZopfliPNG

Sau đây là các nghiên cứu độc lập không do Google tài trợ và không nhất thiết phải đảm bảo tính chính xác của tất cả nội dung trong đó.

  1. Blog của Yoav Weiss