ตัวแปลง Base64 เป็น WebP

บันทึกรูปภาพ WebP ที่เข้ารหัส Base64 เป็นไฟล์ หรือเปลี่ยนข้อมูล Base64 ของ PNG และ JPEG เป็น WebP ซึ่งเป็นรูปแบบสมัยใหม่ที่มักมีขนาดเล็กกว่าเมื่อคุณภาพของภาพใกล้เคียงกัน

ทำงานภายในเบราว์เซอร์ของคุณทั้งหมด ไม่มีการอัปโหลดข้อมูลใด ๆ

วิธีใช้งาน

  1. วางสตริง Base64 หรือ URI แบบ data:image/webp;base64 จะเป็นรูปภาพรูปแบบอื่นก็ได้เช่นกัน
  2. ตรวจดูภาพตัวอย่าง รูปแบบที่ตรวจพบ และขนาดหลังถอดรหัส
  3. คง WebP ไว้ใน “ดาวน์โหลดเป็น” เพื่อแปลงไฟล์ หรือเลือก “ต้นฉบับ” เพื่อบันทึกไบต์ตรงตามที่ถอดรหัสได้
  4. ดาวน์โหลดไฟล์ .webp แล้วเปรียบเทียบขนาดกับไฟล์ต้นทาง

การจดจำข้อมูล WebP

WebP จัดเก็บอยู่ในคอนเทนเนอร์ RIFF ซึ่งเป็นโครงสร้างห่อหุ้มแบบเดียวกับที่ไฟล์เสียง WAV ใช้ ไฟล์ขึ้นต้นด้วยข้อความ ASCII RIFF Base64 ของไฟล์จึงขึ้นต้นด้วย UklGR ถัดไปอีกไม่กี่ไบต์จะมีเครื่องหมาย WEBP ยืนยันว่าคอนเทนเนอร์นี้เก็บรูปภาพ ไม่ใช่เสียง ภายในเป็นรูปภาพแบบสูญเสียข้อมูล (VP8) แบบไม่สูญเสียข้อมูล (VP8L) หรือไฟล์แบบขยาย (VP8X) ที่เพิ่มความโปร่งใส ภาพเคลื่อนไหว หรือเมทาดาทา ชนิด MIME คือ image/webp

ทำไมจึงควรแปลงเป็น WebP

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

ไฟล์ที่เล็กลงมีประโยชน์เป็นสองเท่าเมื่อฝังรูปภาพแบบอินไลน์ เพราะรูปภาพที่เบาลงหมายถึงสตริง Base64 ที่สั้นลงใน HTML, CSS หรือ JSON ด้วย หลังจากแปลงแล้ว คุณเข้ารหัสไฟล์ใหม่อีกครั้งได้ด้วย แปลง WebP เป็น Base64

ผลลัพธ์ไม่ได้เล็กลงเสมอไป ไอคอนขนาดจิ๋ว ภาพถ่ายที่บีบอัดมาดีแล้ว และกราฟิกเรียบ ๆ ที่มีสีไม่มาก บางครั้งกลับใหญ่ขึ้น ในกรณีนั้น PNG หรือ JPG เป็นตัวเลือกที่ดีกว่า การแปลงที่นี่ยังเป็นวิธีทดสอบอย่างรวดเร็วว่ารูปภาพหนึ่ง ๆ จะลดขนาดได้มากเพียงใดก่อนที่คุณจะเปลี่ยนไปป์ไลน์การบิลด์ เพียงวาง Base64 ของ PNG หรือ JPEG ดาวน์โหลด WebP แล้วเปรียบเทียบขนาดของทั้งสองไฟล์

การแปลงด้วย Pillow

สำหรับงานแบบแบตช์บนเซิร์ฟเวอร์ การแปลงแบบเดียวกันนี้ใช้โค้ด Python เพียงไม่กี่บรรทัดร่วมกับไลบรารี Pillow:

import base64, io
from PIL import Image

img = Image.open(io.BytesIO(base64.b64decode(b64_string)))
img.save('output.webp', 'WEBP', quality=80)

คำถามที่พบบ่อย

WebP คงความโปร่งใสไว้หรือไม่

ใช่ WebP รองรับช่องอัลฟาเต็มรูปแบบทั้งในโหมดสูญเสียข้อมูลและไม่สูญเสียข้อมูล พื้นที่โปร่งใสจึงยังโปร่งใสหลังการแปลง

เก็บ WebP แบบเคลื่อนไหวไว้ได้หรือไม่

ดาวน์โหลดเป็น “ต้นฉบับ” เพื่อเก็บทุกเฟรมไว้ การแปลงต้องผ่าน canvas ซึ่งจับภาพได้เพียงเฟรมนิ่งเฟรมเดียว

เอาต์พุต WebP เล็กกว่าอินพุตเสมอหรือไม่

ไม่เสมอไป ภาพถ่ายและภาพหน้าจอขนาดใหญ่มักเล็กลง แต่รูปภาพขนาดเล็กหรือรูปภาพที่ปรับขนาดมาอย่างดีแล้วอาจใหญ่ขึ้น ให้เปรียบเทียบขนาดหลังถอดรหัสที่เครื่องมือแสดงกับขนาดของไฟล์ที่ดาวน์โหลด

ซอฟต์แวร์บางตัวเปิดไฟล์ WebP ของฉันไม่ได้ ควรทำอย่างไร

โปรแกรมดูรูปภาพและโปรแกรมสำนักงานรุ่นเก่าอาจไม่รองรับ WebP ให้วาง Base64 เดิมแล้วดาวน์โหลดเป็น PNG หรือ JPG แทน