การเข้ารหัสแบบไม่เสียรายละเอียดและความโปร่งใสใน WebP

Jyrki Alakuijala, Ph.D., Google, Inc.
Vincent Rabaud, Ph.D., Google Inc.
อัปเดตล่าสุด: 01-08-2017

Abstract -- เราเปรียบเทียบการใช้ทรัพยากรของโปรแกรมเปลี่ยนไฟล์/โปรแกรมถอดรหัส WebP กับการใช้ PNG ทั้งในโหมดแบบไม่สูญเสียข้อมูลและโหมดสูญเสียข้อมูล เราใช้คลังข้อมูลรูปภาพ PNG แบบโปร่งแสงจากอินเทอร์เน็ตจำนวน 1,2,000 รูปที่สุ่มเลือก และค่าการวัดที่ง่ายขึ้นเพื่อแสดงการเปลี่ยนแปลงของประสิทธิภาพ เราได้บีบอัด PNG อีกครั้งในคลังข้อมูลเพื่อเปรียบเทียบรูปภาพ WebP กับ PNG ที่ปรับขนาดแล้ว ในผลลัพธ์ เราพบว่า WebP เป็นการแทนที่ PNG ที่ดีสำหรับการใช้งานบนเว็บเกี่ยวกับทั้งขนาดและความเร็วในการประมวลผล

เกริ่นนำ

WebP รองรับรูปภาพที่ไม่เสียรายละเอียดและโปร่งแสง จึงเป็นทางเลือกแทนรูปแบบ PNG เทคนิคพื้นฐานมากมายที่ใช้ในการบีบอัด PNG เช่น การเขียนโค้ดพจนานุกรม การเขียนโค้ด Huffman และการแปลงการจัดทำดัชนีสี ได้รับการสนับสนุนใน WebP ด้วยเช่นกัน ซึ่งส่งผลให้ได้ความเร็วและความหนาแน่นในการบีบอัดใกล้เคียงกันในกรณีที่แย่ที่สุด ในขณะเดียวกัน คุณสมบัติใหม่หลายๆ อย่าง เช่น รหัสเอนโทรปีแยกต่างหากสำหรับแต่ละช่องสี ตำแหน่งแบบ 2 มิติของระยะอ้างอิงย้อนหลัง และแคชสีของสีที่ใช้ล่าสุด จะช่วยให้ความหนาแน่นในการบีบอัดภาพส่วนใหญ่ดีขึ้น

ในงานนี้ เราจะเปรียบเทียบประสิทธิภาพของ WebP กับ PNG ที่มีการบีบอัดสูงโดยใช้ pngcrush และ ZopfliPNG เราบีบอัดคลังข้อมูลอ้างอิงของรูปภาพบนเว็บอีกครั้งโดยใช้แนวทางปฏิบัติแนะนำ และเปรียบเทียบการบีบอัด WebP ทั้งแบบเสียและไม่สูญเสียข้อมูลกับคลังข้อมูลนี้ นอกเหนือจากคลังข้อมูลอ้างอิงแล้ว เรายังเลือกรูปภาพขนาดใหญ่ 2 รูป รูปหนึ่งเป็นภาพถ่ายและอีกภาพเป็นกราฟิก เพื่อการเปรียบเทียบความเร็วและหน่วยความจำ

การถอดรหัสนั้นเร็วกว่า PNG และการบีบอัดก็หนากว่า 23% เมื่อเทียบกับรูปแบบ PNG ในปัจจุบัน เราสรุปว่า WebP เป็นการแทนที่รูปแบบรูปภาพ PNG ในปัจจุบันที่มีประสิทธิภาพมากกว่า นอกจากนี้ การบีบอัดรูปภาพแบบสูญเสียบางส่วนที่รองรับอัลฟ่าแบบไม่สูญเสียข้อมูล ยังช่วยเพิ่มความเร็วเว็บไซต์ได้อีก

วิธีการ

เครื่องมือบรรทัดคำสั่ง

เราใช้เครื่องมือบรรทัดคำสั่งต่อไปนี้เพื่อวัดประสิทธิภาพ

  1. cwebp และ dwebp เครื่องมือเหล่านี้ที่เป็นส่วนหนึ่งของไลบรารี libwebp (รวบรวมจาก head)

  2. ทำให้เกิด Conversion โดยเป็นส่วนหนึ่งของเครื่องมือบรรทัดคำสั่งของซอฟต์แวร์ ImageMagick (6.7.7-10 2017-07-21)

  3. pngcrush 1.8.12 (30 กรกฎาคม 2017)

  4. ZopfliPNG (17 กรกฎาคม 2017)

เราใช้เครื่องมือบรรทัดคำสั่งกับแฟล็กควบคุมที่เกี่ยวข้อง เช่น หากเราอ้างถึง cwebp -q 1 -m 0 หมายความว่าเครื่องมือ cwebp ปรากฏด้วยแฟล็ก -q 1 และ -m 0

คลังรูปภาพ

เลือกคลังข้อมูล 3 รายการ ดังนี้

  1. ภาพถ่ายเพียงภาพเดียว (รูปที่ 1)

  2. รูปภาพกราฟิกเดียวที่มีความโปร่งแสง (รูปที่ 2) และ

  3. คลังข้อมูลบนเว็บ: รูปภาพ PNG 1,2,000 รูปที่สุ่มเลือกหรือไม่ก็ได้ ซึ่งรวบรวมข้อมูลจากอินเทอร์เน็ต การเพิ่มประสิทธิภาพรูปภาพ PNG เหล่านี้ผ่านการเพิ่มประสิทธิภาพผ่าน conversion, pngcrush, ZopfliPNG และเวอร์ชันที่เล็กที่สุดของแต่ละรูปภาพจะได้รับการพิจารณาเพื่อทำการศึกษา

รูปที่ 1 รูปภาพขนาด 1024 x 752 พิกเซล หายใจด้วยไฟ "Jaipur Maharaja Brass Band" Chassepierre เบลเยียม ผู้เขียน: Luc Viatour, รูปภาพที่ได้รับอนุญาตภายใต้ครีเอทีฟคอมมอนส์ Attribution-Share Alike 3.0 Unported License คุณสามารถดูเว็บไซต์ของผู้แต่งได้ ที่นี่

รูปที่ 2 รูปภาพกราฟิกขนาด 1024 x 752 พิกเซล ภาพต่อกันจาก Google Chart Tools

ในการวัดความสามารถของรูปแบบ PNG ที่มีอยู่ได้อย่างเต็มรูปแบบ เราได้บีบอัดรูปภาพ PNG ต้นฉบับเหล่านี้ทั้งหมดโดยใช้วิธีการหลายวิธีดังนี้

  1. ยึดเป็น 8 บิตต่อคอมโพเนนต์: แปลง Input.png -depth 8 export.png

  2. ImageMagick(1) with no predictors: conversion Input.png -quality 90 export-candidate.png

  3. ImageMagick พร้อมตัวคาดการณ์แบบปรับอัตโนมัติ: แปลงอินพุต.png -quality 95 export-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 ข้อความ อินพุต

  5. ZopfliPNG(3): zopflipng --lossy_transparency Input.png export-candidate.png

  6. ZopfliPNG พร้อมด้วยตัวกรองทั้งหมด: zopflipng --iterations=500 --filters=01234mepb --lossy_8bit --lossy_transparency Input.png export-candidate.png

ผลลัพธ์

เราคำนวณความหนาแน่นของการบีบอัดสำหรับรูปภาพแต่ละภาพในคลังข้อมูลบนเว็บ โดยเทียบกับขนาดรูปภาพ PNG ที่เพิ่มประสิทธิภาพแล้วสำหรับ 3 วิธีต่อไปนี้

  1. WebP แบบไม่สูญเสียรายละเอียด (การตั้งค่าเริ่มต้น)

  2. WebP แบบไม่สูญเสียขนาดที่มีขนาดเล็กที่สุด (-ม. 6 - คิว 100)

  3. ที่ดีที่สุดของ WebP แบบไม่สูญเสียรายละเอียด และ WebP แบบสูญเสียบางส่วนที่มีอัลฟ่า (การตั้งค่าเริ่มต้น)

เราจัดเรียงปัจจัยในการบีบอัดเหล่านี้และพล็อตปัจจัยในรูปที่ 3

รูปที่ 3 ระบบจะใช้ความหนาแน่นของการบีบอัด PNG เป็นข้อมูลอ้างอิงที่ 1.0 รูปภาพเดียวกันจะได้รับการบีบอัดโดยใช้ทั้งวิธีแบบสูญเสียและไม่สูญเสียรายละเอียด สำหรับรูปภาพแต่ละรูป ระบบจะคำนวณอัตราส่วนขนาดต่อ PNG ที่บีบอัด แล้วจัดเรียงอัตราส่วนขนาด และจะแสดงทั้งสำหรับการบีบอัดแบบสูญเสียและไม่สูญเสียข้อมูล (Lossy) สำหรับเส้นโค้งการบีบอัดแบบสูญเสียบางส่วน ระบบจะเลือกการบีบอัดแบบไม่สูญเสียข้อมูลในกรณีที่สร้างรูปภาพ WebP ขนาดเล็ก

WebP ทำได้มากกว่าความหนาแน่นในการบีบอัด PNG ทั้งสำหรับ libpng ที่คุณภาพสูงสุด (Conversion) และ ZopfliPNG (ตารางที่ 1) และการเข้ารหัส (ตารางที่ 2) และความเร็วในการถอดรหัส (ตารางที่ 3) นั้นเทียบได้ใกล้เคียงกับของ PNG

ตารางที่ 1. บิตต่อพิกเซลโดยเฉลี่ยของคลังทั้ง 3 โดยใช้วิธีการบีบอัดที่ต่างกัน

ชุดรูปภาพ แปลง -คุณภาพ 95 ZopfliPNG WebP แบบไม่สูญเสียรายละเอียด -q 0 -m 1 WebP แบบไม่สูญเสียรายละเอียด (การตั้งค่าเริ่มต้น) WebP แบบไม่สูญเสียรายละเอียด -m 6 -q 100 WebP แบบสูญเสียบางส่วนที่มีอัลฟ่า
รูปภาพ 12.3 12.2 10.5 10.1 9.83 0.81
โจ่งแจ้ง 1.36 1.05 0.88 0.71 0.70 0.51
เว็บ 6.85 5.05 4.42 4.04 3.96 1.92

ตารางที่ 2 เวลาการเข้ารหัสโดยเฉลี่ยสำหรับการบีบอัด และสำหรับวิธีการบีบอัดที่แตกต่างกัน

ชุดรูปภาพ แปลง -คุณภาพ 95 ZopfliPNG WebP แบบไม่สูญเสียรายละเอียด -q 0 -m 1 WebP แบบไม่สูญเสียรายละเอียด (การตั้งค่าเริ่มต้น) WebP แบบไม่สูญเสียรายละเอียด -m 6 -q 100 WebP แบบสูญเสียบางส่วนที่มีอัลฟ่า
รูปภาพ 0.500 วิ 8.7 วิ 0.293 วิ 0.780 วิ 8.440 วิ 0.111 วินาที
โจ่งแจ้ง 0.179 วิ 14.0 วิ 0.065 วิ 0.140 วิ 3.510 วิ 0.184 วิ
เว็บ 0.040 วินาที 1.55 วิ 0.017 วินาที 0.072 วินาที 2.454 วิ 0.020 วิ

ตารางที่ 3 เวลาในการถอดรหัสโดยเฉลี่ยของคลังข้อมูลทั้ง 3 รายการสำหรับไฟล์ภาพที่บีบอัดด้วยวิธีและการตั้งค่าที่ต่างกัน

ชุดรูปภาพ แปลง -คุณภาพ 95 ZopfliPNG WebP แบบไม่สูญเสียรายละเอียด -q 0 -m 1 WebP แบบไม่สูญเสียรายละเอียด (การตั้งค่าเริ่มต้น) WebP แบบไม่สูญเสียรายละเอียด -m 6 -q 100 WebP แบบสูญเสียบางส่วนที่มีอัลฟ่า
รูปภาพ 0.027 วิ 0.026 วิ 0.027 วิ 0.026 วิ 0.027 0.012 วินาที
กราฟิก 0.049 วิ 0.015 วิ 0.005 วิ 0.005 วิ 0.003 0.010 วินาที
เว็บ 0.007 วินาที 0.005 วิ 0.003 วิ 0.003 วิ 0.003 0.003 วิ

การทำโปรไฟล์หน่วยความจำ

สำหรับการสร้างโปรไฟล์หน่วยความจำ เราบันทึกขนาดชุดพักอาศัยสูงสุดตามที่รายงานโดย /usr/bin/time -v

สำหรับคลังข้อมูลบนเว็บ ขนาดของรูปภาพที่ใหญ่ที่สุดเท่านั้นที่จะกำหนดการใช้งานหน่วยความจำสูงสุด เพื่อให้การวัดหน่วยความจำชัดเจนยิ่งขึ้น เราจะใช้ภาพถ่ายภาพถ่ายภาพเดียว (ภาพที่ 1) เพื่อแสดงภาพรวมของการใช้หน่วยความจำ รูปภาพกราฟิกจะให้ผลลัพธ์ที่คล้ายกัน

เราวัด 10-19 MiB สำหรับ libpng และ ZopfliPNG และ 25 MiB และ 32 MiB สำหรับการเข้ารหัสแบบไม่สูญเสียข้อมูลของ WebP ที่การตั้งค่า -q 0 -m 1 และ -q 95 (มีค่าเริ่มต้นเป็น -m) ตามลำดับ

ในการทดสอบการถอดรหัส ให้แปลง -resize 1x1 ใช้ขนาด 10 MiB สำหรับทั้งไฟล์ PNG ที่สร้างขึ้น libpng และ ZopfliPNG เมื่อใช้ cwebp การถอดรหัส WebP แบบไม่สูญเสียรายละเอียด จะใช้ 7 MiB และการถอดรหัสแบบสูญเสียบางส่วน 3 MiB

บทสรุป

เราได้แสดงให้เห็นว่าความเร็วในการเข้ารหัสและถอดรหัสอยู่ในโดเมนเดียวกันกับ PNG มีการใช้หน่วยความจำเพิ่มขึ้นในขั้นตอนการเข้ารหัส แต่ขั้นตอนการถอดรหัสจะมีแนวโน้มลดลงอย่างมาก อย่างน้อยเมื่อเปรียบเทียบพฤติกรรมของ cwebp กับการแปลงของ ImageMagick

ความหนาแน่นของการบีบอัดจะดีกว่า 99% ของรูปภาพในเว็บ ซึ่งทำให้รูปภาพเปลี่ยนจาก PNG เป็น WebP ได้ค่อนข้างง่าย

เมื่อเรียกใช้ WebP โดยใช้การตั้งค่าเริ่มต้น ระบบจะบีบอัดดีกว่า libpng 42% และดีกว่า ZopfliPNG 23% ซึ่งชี้ให้เห็นว่า WebP มีแนวโน้ม ที่จะเร่งความเร็วเว็บไซต์ที่เต็มไปด้วยรูปภาพ

รายการอ้างอิง

  1. ImageMagick

  2. Pngcrush

  3. ZopfliPNG

ต่อไปนี้คือการศึกษาอิสระที่ไม่ได้รับการสนับสนุนจาก Google และ Google ไม่ได้สนับสนุนความถูกต้องของเนื้อหาทั้งหมดเสมอไป

  1. บล็อกของ Yoav Weiss