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

เข้ารหัสไฟล์ PNG เป็น Base64 โดยคงความโปร่งใสไว้ครบถ้วน ลากมาวางหรือวางไฟล์ PNG แล้วคัดลอกเป็น data URI, แท็ก img ของ HTML, พื้นหลัง CSS หรือรูปภาพ Markdown

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

วิธีใช้งาน

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

PNG กับ Base64

PNG (Portable Network Graphics, ชนิด MIME image/png) เป็นรูปแบบภาพแรสเตอร์แบบไม่สูญเสียข้อมูลที่มีช่องอัลฟาเต็มรูปแบบ จึงเป็นตัวเลือกยอดนิยมสำหรับไอคอน โลโก้ แผนภาพ และภาพหน้าจอ ไฟล์ PNG ทุกไฟล์ขึ้นต้นด้วยลายเซ็นขนาด 8 ไบต์แบบเดียวกัน data URI ของ PNG ทุกรายการจึงขึ้นต้นเหมือนกัน คือ data:image/png;base64,iVBORw0KGgo...

Base64 ไม่ได้แตะต้องพิกเซลเลย เมื่อถอดรหัสสตริงจะได้ไฟล์ที่เหมือนเดิมทุกไบต์ ทั้งสีและพื้นที่โปร่งใส

การใช้งานที่เหมาะกับ data URI ของ PNG

  • ไอคอนและโลโก้ขนาดเล็กในส่วนติดต่อผู้ใช้ที่ต้องมีพื้นหลังโปร่งใส
  • ภาพหน้าจอในรายงาน HTML ที่สมบูรณ์ในตัวเอง รายงานข้อบกพร่อง หรือเอกสารที่ส่งออก
  • แผนภูมิและคิวอาร์โค้ดที่สร้างบนเซิร์ฟเวอร์และส่งกลับมาในการตอบกลับแบบ JSON
  • รูปภาพที่สร้างด้วย canvas.toDataURL() ซึ่งให้ผลลัพธ์เป็น data URI ของ PNG โดยค่าเริ่มต้นอยู่แล้ว

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

ลดขนาด PNG ก่อนเข้ารหัส

ทุกไบต์ที่ตัดออกจาก PNG ช่วยประหยัดอักขระ Base64 ได้ประมาณ 1.33 ตัว ควรนำไฟล์ไปผ่านเครื่องมือปรับขนาดไฟล์ให้เหมาะสมก่อน เช่น oxipng หรือ zopflipng (แบบไม่สูญเสียข้อมูล) หรือ pngquant (ลดจำนวนสีในจานสี) และควรตรวจดูขนาดพิกเซลด้วย ไอคอนที่ส่งออกมาใหญ่กว่าขนาดที่แสดงจริงสามเท่ามักย่อลงได้ด้วยตัวเลือก “ความกว้างสูงสุด”

การแปลงเป็น WebP ยังคงความโปร่งใสไว้และมักได้ไฟล์ที่เล็กกว่ามาก ส่วนการแปลงเป็น JPEG จะตัดความโปร่งใสออก พื้นที่โปร่งใสจึงกลายเป็นสีทึบ การเข้ารหัสใหม่เป็น PNG ในเบราว์เซอร์ไม่ได้ปรับการบีบอัดให้เหมาะสม ผลลัพธ์จึงอาจใหญ่กว่าไฟล์ต้นฉบับที่ปรับแต่งมาอย่างดี ควรเปรียบเทียบขนาดก่อนคัดลอก

การใช้เอาต์พุต

<img src="data:image/png;base64,iVBORw0KGgo..." width="24" height="24" alt="Settings">

.icon-settings {
  background: url("data:image/png;base64,iVBORw0KGgo...") no-repeat center / 24px 24px;
}

# บรรทัดคำสั่ง: GNU coreutils / macOS
base64 -w 0 icon.png
base64 -i icon.png

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

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

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

ทำไมสตริง Base64 ของ PNG ทุกรายการจึงขึ้นต้นด้วย iVBORw0KGgo

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

วางภาพหน้าจอได้โดยตรงหรือไม่
ได้ คัดลอกภาพหน้าจอแล้ววางลงในหน้านี้ โดยทั่วไปเบราว์เซอร์จะส่งภาพหน้าจอที่วางมาในรูปแบบ PNG คุณจึงได้ผลลัพธ์เป็น data:image/png
PNG ที่จะฝังเป็น Base64 ควรมีขนาดเท่าใด

หลักทั่วไปที่นิยมใช้คือไม่กี่กิโลไบต์ และไม่เกินประมาณ 10 KB รูปภาพที่ใหญ่กว่านั้นควรให้บริการเป็นไฟล์แยก เพื่อให้เบราว์เซอร์แคชและโหลดพร้อมกันหลายไฟล์ได้