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

เข้ารหัสไอคอน โลโก้ และภาพประกอบ SVG เป็น Base64 สำหรับแท็ก img พื้นหลัง CSS และ JSON นอกจากนี้ยังแปลง SVG เป็นภาพแรสเตอร์ PNG, JPEG หรือ WebP ก่อนเข้ารหัสได้ด้วย

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

วิธีใช้งาน

  1. ลากไฟล์ .svg มาวางในพื้นที่วางไฟล์ คลิกเพื่อเลือกไฟล์ หรือวางรูปภาพ
  2. เลือก “คงรูปแบบเดิม” เพื่อเข้ารหัสมาร์กอัป SVG โดยตรง หรือเลือก PNG, JPEG หรือ WebP เพื่อแปลงเป็นพิกเซล
  3. หากแปลงเป็นภาพแรสเตอร์ ให้ตั้ง “ความกว้างสูงสุด” เพื่อกำหนดขนาดพิกเซล
  4. คัดลอกเอาต์พุต CSS background-image สำหรับสไตล์ชีต หรือเลือกใช้ data URI, Base64 ล้วน, แท็ก img หรือ Markdown

SVG ในรูปแบบ data URI

SVG (Scalable Vector Graphics, ชนิด MIME image/svg+xml) อธิบายรูปทรงต่าง ๆ ด้วยข้อความ XML จึงคมชัดได้ในทุกขนาด Base64 ของ SVG มักขึ้นต้นด้วย PHN2Zy (คือ <svg ที่เข้ารหัสแล้ว) หรือ PD94bWw เมื่อไฟล์ขึ้นต้นด้วยการประกาศ XML

เมื่อใช้ SVG เป็นรูปภาพ องค์ประกอบรากต้องมี xmlns="http://www.w3.org/2000/svg" โค้ดอินไลน์จำนวนมากที่คัดลอกมาจาก HTML มักไม่มีแอตทริบิวต์นี้ ทำให้ data URI ไม่แสดงอะไรเลย นอกจากนี้ทรัพยากรภายนอกยังถูกบล็อกในโหมดรูปภาพ เว็บฟอนต์และรูปภาพที่ลิงก์ไว้ภายใน SVG จึงไม่โหลด ให้แปลงข้อความเป็นพาธหรือฝังทรัพยากรเหล่านั้นไว้ในไฟล์ก่อน

Base64 หรือการเข้ารหัส URL

เนื่องจาก SVG เป็นข้อความอยู่แล้ว data URI จึงบรรจุมาร์กอัปได้โดยตรง โดยเข้ารหัสแบบเปอร์เซ็นต์เพียงไม่กี่อักขระ (<, >, #, % และเครื่องหมายอัญประกาศ) สำหรับไอคอนทั่วไปใน CSS วิธีนี้ให้ผลลัพธ์ที่สั้นกว่า Base64 และบีบอัดด้วย gzip ได้ดีกว่า ส่วน Base64 ปลอดภัยกว่าเมื่อสตริงต้องผ่านระบบที่ทำให้เครื่องหมายอัญประกาศหรืออักขระพิเศษผิดเพี้ยน หรือเมื่อ API ต้องการ Base64

/* Base64 */
background-image: url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0i...");

/* เข้ารหัสแบบเปอร์เซ็นต์ */
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg'...");

หากต้องการสร้างรูปแบบที่เข้ารหัสแบบเปอร์เซ็นต์ ให้ใช้ ตัวสร้าง Data URI แล้วเลือก “การเข้ารหัสแบบเปอร์เซ็นต์”

ทำความสะอาด SVG ที่ไม่น่าเชื่อถือ

SVG อาจมีองค์ประกอบ <script> แอตทริบิวต์ตัวจัดการเหตุการณ์ เช่น onload และลิงก์ไปยังเอกสารอื่น เบราว์เซอร์จะไม่รันสคริปต์ใน SVG ที่แสดงผ่าน <img> หรือพื้นหลัง CSS แต่หากฝังไฟล์เดียวกันนี้แบบอินไลน์ใน HTML หรือเปิดไฟล์โดยตรง สคริปต์ก็จะทำงานได้ หากผู้ใช้อัปโหลดไฟล์ SVG ไปยังแอปพลิเคชันของคุณได้ ให้ทำความสะอาดไฟล์ก่อนจัดเก็บหรือฝัง เช่น ด้วย DOMPurify ทั้งนี้ Base64 เพียงซ่อนมาร์กอัปจากการมองผ่าน ๆ เท่านั้น ไม่ได้ทำให้ไฟล์ปลอดภัยขึ้น

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

Base64 หรือการเข้ารหัส URL ดีกว่ากันสำหรับ SVG

สำหรับ SVG ใน CSS การเข้ารหัส URL มักให้ผลลัพธ์ที่เล็กกว่าและยังอ่านได้ ส่วน Base64 ทนทานกว่าเมื่อสตริงต้องผ่านระบบอื่น หรือเมื่อ API กำหนดให้ใช้ Base64

ทำไม data URI ของ SVG จึงไม่แสดงผล
สาเหตุที่พบบ่อยที่สุดคือ องค์ประกอบรากไม่มีแอตทริบิวต์ xmlns มีอักขระ # ที่ไม่ได้ escape ใน URI ที่เข้ารหัสแบบเปอร์เซ็นต์ และมีฟอนต์หรือรูปภาพที่ SVG โหลดจากไฟล์อื่น
แปลง SVG เป็นสตริง Base64 แบบ PNG ได้หรือไม่

ได้ เลือก PNG ในตัวเลือก “แปลงเป็น” เบราว์เซอร์จะเรนเดอร์ SVG เป็นพิกเซล และตัวเลือก “ความกว้างสูงสุด” ช่วยให้ผลลัพธ์มีขนาดเล็กลงได้

ถอดรหัส data URI ของ SVG กลับเป็นไฟล์ได้หรือไม่
ได้ วางลงใน แปลง Base64 เป็น SVG เพื่อดูตัวอย่างและดาวน์โหลดไฟล์ .svg