Jyrki Alakuijala, Ph.D., Google, Inc.
Vincent Rabaud, Ph.D., Google, Inc.
อัปเดตล่าสุด: 01-08-2017
บทสรุป -- เราเปรียบเทียบการใช้ทรัพยากรของโปรแกรมเข้ารหัส/ถอดรหัส WebP กับ PNG ทั้งในรูปแบบที่ไม่มีการสูญเสียและมีการสูญเสีย เราใช้ชุดรูปภาพ PNG แบบโปร่งแสง 12,000 รูปที่เลือกแบบสุ่มจากเว็บ และการวัดผลที่ง่ายขึ้นเพื่อแสดงถึงความแตกต่างของประสิทธิภาพ เราได้บีบอัดไฟล์ PNG ในคลังของเราอีกครั้งเพื่อเปรียบเทียบรูปภาพ WebP กับ PNG ที่ปรับขนาดแล้ว ผลลัพธ์ของเราแสดงให้เห็นว่า WebP เป็นทางเลือกที่ดีสำหรับ PNG เพื่อใช้ในเว็บทั้งในด้านขนาดและความเร็วในการประมวลผล
บทนำ
WebP รองรับรูปภาพแบบไม่สูญเสียรายละเอียดและแบบโปร่งแสง จึงเป็นอีกทางเลือกหนึ่งสำหรับรูปแบบ PNG WebP รองรับเทคนิคพื้นฐานหลายอย่างที่ใช้ในการบีบอัด PNG เช่น การโค้ดพจนานุกรม การโค้ด Huffman และการเปลี่ยนรูปแบบการจัดทำดัชนีสี ซึ่งส่งผลให้มีความเร็วและความหนาแน่นในการบีบอัดที่คล้ายกันในกรณีที่เลวร้ายที่สุด ในขณะเดียวกัน ฟีเจอร์ใหม่หลายอย่าง เช่น รหัสเอนโทรปีแยกต่างหากสำหรับช่องสีต่างๆ ความเป็นท้องถิ่น 2 มิติของระยะอ้างอิงย้อนหลัง และแคชสีของสีที่ใช้ล่าสุด ช่วยให้สามารถเพิ่มระดับการบีบอัดสำหรับรูปภาพส่วนใหญ่ได้
ในงานนี้ เราจะเปรียบเทียบประสิทธิภาพของ WebP กับ PNG ที่บีบอัดอย่างสูงโดยใช้ pngcrush และ ZopfliPNG เราบีบอัดชุดข้อมูลอ้างอิงรูปภาพบนเว็บอีกครั้งโดยใช้แนวทางปฏิบัติแนะนำ และเปรียบเทียบการบีบอัด WebP แบบไม่สูญเสียรายละเอียดและแบบสูญเสียรายละเอียดบางส่วนกับชุดข้อมูลนี้ นอกจากชุดข้อมูลอ้างอิงแล้ว เรายังเลือกรูปภาพขนาดใหญ่ 2 รูปด้วย โดยรูปภาพหนึ่งเป็นรูปถ่ายและอีกรูปเป็นภาพกราฟิก เพื่อทำการเปรียบเทียบความเร็วและการใช้หน่วยความจำ
มีการสาธิตความเร็วในการถอดรหัสที่เร็วกว่า PNG รวมถึงการบีบอัดที่หนาแน่นขึ้น 23% กว่าที่ทำได้โดยใช้รูปแบบ PNG ในปัจจุบัน เราสรุปได้ว่า WebP เป็นรูปแบบที่มีประสิทธิภาพมากกว่าสำหรับแทนที่รูปแบบรูปภาพ PNG ในปัจจุบัน นอกจากนี้ การบีบอัดรูปภาพแบบสูญเสียบางส่วนที่รองรับอัลฟ่าแบบไม่สูญเสียยังช่วยเพิ่มโอกาสในการเร่งความเร็วเว็บไซต์ได้อีกด้วย
เมธอด
เครื่องมือบรรทัดคำสั่ง
เราใช้เครื่องมือบรรทัดคำสั่งต่อไปนี้เพื่อวัดประสิทธิภาพ
cwebp และ dwebp เครื่องมือเหล่านี้เป็นส่วนหนึ่งของไลบรารี libwebp (คอมไพล์จาก head)
แปลง เครื่องมือบรรทัดคำสั่งนี้เป็นส่วนหนึ่งในซอฟต์แวร์ ImageMagick (6.7.7-10 2017-07-21)
pngcrush 1.8.12 (30 ก.ค. 2017)
ZopfliPNG (17 ก.ค. 2017)
เราใช้เครื่องมือบรรทัดคำสั่งที่มี Flag การควบคุมที่เกี่ยวข้อง ตัวอย่างเช่น หากเราอ้างอิงถึง cwebp -q 1 -m 0 หมายความว่ามีการเรียกใช้เครื่องมือ cwebp ด้วย Flag -q 1 และ -m 0
รูปภาพ
เราได้เลือก 3 ภาษาต่อไปนี้
รูปภาพถ่าย 1 รูป (รูปที่ 1)
รูปภาพกราฟิกรูปเดียวที่มีความโปร่งแสง (รูปที่ 2) และ
ชุดข้อมูลเว็บ: รูปภาพ PNG 12,000 รูปที่เลือกแบบสุ่มซึ่งมีหรือไม่มีความโปร่งแสง ซึ่งทำการ Crawl จากอินเทอร์เน็ต รูปภาพ PNG เหล่านี้ได้รับการเพิ่มประสิทธิภาพผ่าน convert, pngcrush, ZopfliPNG และระบบจะพิจารณารูปภาพแต่ละเวอร์ชันที่มีขนาดเล็กที่สุดสำหรับการศึกษา
รูปที่ 1 รูปภาพขนาด 1024 x 752 พิกเซล การแสดงพ่นไฟจาก "Jaipur Maharaja Brass Band" ที่ Chassepierre ประเทศเบลเยียม ผู้แต่ง: Luc Viatour รูปภาพได้รับอนุญาตภายใต้สัญญาอนุญาตครีเอทีฟคอมมอนส์สำหรับยอมรับสิทธิของผู้สร้าง (Creative Commons Attribution License) แบบแชร์ได้แต่ห้ามเปลี่ยนแปลง 3.0 Unported เว็บไซต์ของผู้แต่งอยู่ที่นี่
รูปที่ 2 รูปภาพกราฟิกขนาด 1024 x 752 พิกเซล วางภาพต่อกันจากเครื่องมือแผนภูมิของ Google
เราได้ทำการบีบอัดรูปภาพ PNG ต้นฉบับทั้งหมดเหล่านี้อีกครั้งโดยใช้หลายวิธีต่อไปนี้เพื่อวัดความสามารถทั้งหมดของรูปแบบ PNG ที่มีอยู่
จำกัดเป็น 8 บิตต่อคอมโพเนนต์: convert input.png -depth 8 output.png
ImageMagick(1) ที่ไม่มีตัวทำนาย: convert input.png -quality 90 output-candidate.png
ImageMagick ที่มีตัวทำนายแบบปรับอัตโนมัติ: convert input.png -quality 95 output-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 text input.png output-candidate.png
ZopfliPNG(3): zopflipng --lossy_transparent input.png output-candidate.png
ZopfliPNG พร้อมตัวกรองทั้งหมด: zopflipng --iterations=500 --filters=01234mepb --lossy_8bit --lossy_transparent input.png output-candidate.png
ผลลัพธ์
เราคำนวณความหนาแน่นของการบีบอัดสำหรับรูปภาพแต่ละรูปในชุดข้อมูลเว็บ โดยสัมพันธ์กับขนาดรูปภาพ PNG ที่เพิ่มประสิทธิภาพแล้วสำหรับ 3 วิธี ได้แก่
WebP แบบไม่สูญเสียคุณภาพ (การตั้งค่าเริ่มต้น)
WebP ที่ไม่เสียรายละเอียดที่มีขนาดเล็กที่สุด (-m 6 -q 100)
WebP แบบไม่สูญเสียรายละเอียดและ WebP แบบสูญเสียรายละเอียดบางส่วนแบบอัลฟ่า (การตั้งค่าเริ่มต้น)
เราจัดเรียงปัจจัยการบีบอัดเหล่านี้และพล็อตไว้ในรูปที่ 3
รูปที่ 3 ความหนาแน่นการบีบอัด PNG ใช้เป็นข้อมูลอ้างอิงโดยมีค่า 1.0 ระบบจะบีบอัดรูปภาพเดียวกันโดยใช้ทั้งวิธีการแบบไม่สูญเสียคุณภาพและแบบสูญเสียคุณภาพ ระบบจะคํานวณอัตราส่วนขนาดกับ PNG ที่บีบอัดแล้วสําหรับรูปภาพแต่ละรูป จากนั้นจะจัดเรียงอัตราส่วนขนาดและแสดงทั้งการบีบอัดแบบไม่สูญเสียข้อมูลและแบบสูญเสียข้อมูล สำหรับเส้นโค้งการบีบอัดแบบสูญเสียรายละเอียด ระบบจะเลือกการบีบอัดแบบไม่สูญเสียรายละเอียดในกรณีที่การบีบอัดดังกล่าวสร้างรูปภาพ WebP ที่มีขนาดเล็กลง
WebP มีประสิทธิภาพการบีบอัดที่เหนือกว่า PNG ทั้งสำหรับ libpng ที่คุณภาพสูงสุด (แปลง) และ ZopfliPNG (ตารางที่ 1) โดยมีความเร็วในการเข้ารหัส (ตารางที่ 2) และการถอดรหัส (ตารางที่ 3) เทียบเท่ากับ PNG ประมาณ
ตารางที่ 1 จำนวนบิตต่อพิกเซลโดยเฉลี่ยของคอร์ปัส 3 ชุดที่ใช้วิธีการบีบอัดที่แตกต่างกัน
ชุดรูปภาพ | convert -quality 95 | ZopfliPNG | WebP lossless -q 0 -m 1 | WebP แบบไม่สูญเสียคุณภาพ (การตั้งค่าเริ่มต้น) | WebP lossless -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 เวลาการเข้ารหัสโดยเฉลี่ยสำหรับชุดข้อมูลการบีบอัดและสำหรับวิธีการบีบอัดต่างๆ
ชุดรูปภาพ | convert -quality 95 | ZopfliPNG | WebP lossless -q 0 -m 1 | WebP แบบไม่สูญเสียคุณภาพ (การตั้งค่าเริ่มต้น) | WebP lossless -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 ชุดของไฟล์รูปภาพที่บีบอัดด้วยวิธีการและการตั้งค่าที่แตกต่างกัน
ชุดรูปภาพ | convert -quality 95 | ZopfliPNG | WebP lossless -q 0 -m 1 | WebP แบบไม่สูญเสียคุณภาพ (การตั้งค่าเริ่มต้น) | WebP lossless -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-32 MiB สำหรับการเข้ารหัส WebP แบบไม่สูญเสียข้อมูลในการตั้งค่า -q 0 -m 1 และ -q 95 (ซึ่งมีค่าเริ่มต้นเป็น -m) ตามลำดับ
ในการทดสอบการถอดรหัส คำสั่ง convert -resize 1x1 ใช้พื้นที่ 10 MiB สำหรับทั้งไฟล์ PNG ที่สร้างขึ้นจาก libpng และ ZopfliPNG เมื่อใช้ cwebp การถอดรหัส WebP แบบไม่มีการสูญเสียจะใช้พื้นที่ 7 MiB และการถอดรหัสแบบสูญเสียจะใช้พื้นที่ 3 MiB
สรุป
เราได้แสดงให้เห็นว่าทั้งความเร็วในการเข้ารหัสและการถอดรหัสอยู่ในโดเมนเดียวกันกับของ PNG การใช้หน่วยความจําเพิ่มขึ้นในระยะการเข้ารหัส แต่ระยะการถอดรหัสแสดงการลดลงที่ดีอย่างน้อยเมื่อเปรียบเทียบลักษณะการทํางานของ cwebp กับของ convert ของ ImageMagick
ระดับการบีบอัดดีกว่าสำหรับรูปภาพในเว็บมากกว่า 99% ซึ่งหมายความว่าการเปลี่ยนจาก PNG เป็น WebP นั้นค่อนข้างง่าย
เมื่อเรียกใช้ WebP ด้วยการตั้งค่าเริ่มต้น WebP จะบีบอัดได้ดีกว่า libpng 42% และดีกว่า ZopfliPNG 23% ซึ่งแสดงให้เห็นว่า WebP มีประโยชน์ในการเร่งความเร็วของเว็บไซต์ที่มีรูปภาพจำนวนมาก
ข้อมูลอ้างอิง
การเชื่อมโยงภายนอก
การศึกษาต่อไปนี้เป็นการศึกษาอิสระที่ไม่ได้ได้รับการสนับสนุนจาก Google และ Google ไม่ได้รับรองความถูกต้องของเนื้อหาทั้งหมดในการศึกษา