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 ในปัจจุบันที่มีประสิทธิภาพมากกว่า นอกจากนี้ การบีบอัดรูปภาพแบบสูญเสียบางส่วนที่รองรับอัลฟ่าแบบไม่สูญเสียข้อมูล ยังช่วยเพิ่มความเร็วเว็บไซต์ได้อีก
วิธีการ
เครื่องมือบรรทัดคำสั่ง
เราใช้เครื่องมือบรรทัดคำสั่งต่อไปนี้เพื่อวัดประสิทธิภาพ
cwebp และ dwebp เครื่องมือเหล่านี้ที่เป็นส่วนหนึ่งของไลบรารี libwebp (รวบรวมจาก head)
ทำให้เกิด Conversion โดยเป็นส่วนหนึ่งของเครื่องมือบรรทัดคำสั่งของซอฟต์แวร์ ImageMagick (6.7.7-10 2017-07-21)
pngcrush 1.8.12 (30 กรกฎาคม 2017)
ZopfliPNG (17 กรกฎาคม 2017)
เราใช้เครื่องมือบรรทัดคำสั่งกับแฟล็กควบคุมที่เกี่ยวข้อง เช่น หากเราอ้างถึง cwebp -q 1 -m 0 หมายความว่าเครื่องมือ cwebp ปรากฏด้วยแฟล็ก -q 1 และ -m 0
คลังรูปภาพ
เลือกคลังข้อมูล 3 รายการ ดังนี้
ภาพถ่ายเพียงภาพเดียว (รูปที่ 1)
รูปภาพกราฟิกเดียวที่มีความโปร่งแสง (รูปที่ 2) และ
คลังข้อมูลบนเว็บ: รูปภาพ 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 ต้นฉบับเหล่านี้ทั้งหมดโดยใช้วิธีการหลายวิธีดังนี้
ยึดเป็น 8 บิตต่อคอมโพเนนต์: แปลง Input.png -depth 8 export.png
ImageMagick(1) with no predictors: conversion Input.png -quality 90 export-candidate.png
ImageMagick พร้อมตัวคาดการณ์แบบปรับอัตโนมัติ: แปลงอินพุต.png -quality 95 export-candidate.png
Pngcrush(2): pngcrush -brute -rem tEXt -rem tIME -rem iTXt -rem zTXt -rem gAMA -rem cHRM -rem iCCP -rem sRGB -rem alla -rem ข้อความ อินพุต
ZopfliPNG(3): zopflipng --lossy_transparency Input.png export-candidate.png
ZopfliPNG พร้อมด้วยตัวกรองทั้งหมด: zopflipng --iterations=500 --filters=01234mepb --lossy_8bit --lossy_transparency Input.png export-candidate.png
ผลลัพธ์
เราคำนวณความหนาแน่นของการบีบอัดสำหรับรูปภาพแต่ละภาพในคลังข้อมูลบนเว็บ โดยเทียบกับขนาดรูปภาพ PNG ที่เพิ่มประสิทธิภาพแล้วสำหรับ 3 วิธีต่อไปนี้
WebP แบบไม่สูญเสียรายละเอียด (การตั้งค่าเริ่มต้น)
WebP แบบไม่สูญเสียขนาดที่มีขนาดเล็กที่สุด (-ม. 6 - คิว 100)
ที่ดีที่สุดของ 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 มีแนวโน้ม ที่จะเร่งความเร็วเว็บไซต์ที่เต็มไปด้วยรูปภาพ
รายการอ้างอิง
การเชื่อมโยงภายนอก
ต่อไปนี้คือการศึกษาอิสระที่ไม่ได้รับการสนับสนุนจาก Google และ Google ไม่ได้สนับสนุนความถูกต้องของเนื้อหาทั้งหมดเสมอไป