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

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 ในปัจจุบัน นอกจากนี้ การบีบอัดรูปภาพแบบสูญเสียบางส่วนที่รองรับอัลฟ่าแบบไม่สูญเสียยังช่วยเพิ่มโอกาสในการเร่งความเร็วเว็บไซต์ได้อีกด้วย

เมธอด

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

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

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

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

  3. pngcrush 1.8.12 (30 ก.ค. 2017)

  4. ZopfliPNG (17 ก.ค. 2017)

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

รูปภาพ

เราได้เลือก 3 ภาษาต่อไปนี้

  1. รูปภาพถ่าย 1 รูป (รูปที่ 1)

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

  3. ชุดข้อมูลเว็บ: รูปภาพ 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 ที่มีอยู่

  1. จำกัดเป็น 8 บิตต่อคอมโพเนนต์: convert input.png -depth 8 output.png

  2. ImageMagick(1) ที่ไม่มีตัวทำนาย: convert input.png -quality 90 output-candidate.png

  3. ImageMagick ที่มีตัวทำนายแบบปรับอัตโนมัติ: convert 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-candidate.png

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

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

ผลลัพธ์

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

  1. WebP แบบไม่สูญเสียคุณภาพ (การตั้งค่าเริ่มต้น)

  2. WebP ที่ไม่เสียรายละเอียดที่มีขนาดเล็กที่สุด (-m 6 -q 100)

  3. 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 มีประโยชน์ในการเร่งความเร็วของเว็บไซต์ที่มีรูปภาพจำนวนมาก

ข้อมูลอ้างอิง

  1. ImageMagick

  2. Pngcrush

  3. ZopfliPNG

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

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