วิธีใช้งาน
- ลากไฟล์ .bmp มาวางในพื้นที่วางไฟล์ คลิกเพื่อเลือกไฟล์ หรือวางรูปภาพ
- เลือก PNG ในตัวเลือก “แปลงเป็น” เพื่อให้ได้ผลลัพธ์แบบไม่สูญเสียข้อมูลที่เล็กลงมาก หรือเลือก “คงรูปแบบเดิม” หากระบบปลายทางต้องการไฟล์ BMP
- เปรียบเทียบขนาดต้นฉบับกับขนาดหลังเข้ารหัสเพื่อดูว่าประหยัดได้เท่าใด
- คัดลอกหรือดาวน์โหลดผลลัพธ์เป็น data URI, Base64 ล้วน, แท็ก img, กฎ CSS หรือรูปภาพ Markdown
ไฟล์ BMP คืออะไร
BMP คือรูปแบบบิตแมปที่ไม่ขึ้นกับอุปกรณ์ (device-independent bitmap) ของ Windows จัดเก็บพิกเซลทีละแถว และแทบทุกครั้งไม่มีการบีบอัด (มีโหมด run-length แบบง่ายสำหรับภาพ 4 บิตและ 8 บิต) ชนิด MIME คือ image/bmp แม้บางระบบจะรายงานเป็น image/x-ms-bmp และเอาต์พุต Base64 จะขึ้นต้นด้วย Qk ซึ่งคือตัวอักษร BM ที่เข้ารหัสแล้ว
เมื่อไม่มีการบีบอัด ขนาดไฟล์จะขึ้นอยู่กับขนาดภาพโดยตรง ภาพ 24 บิตขนาด 800 x 600 พิกเซลต้องใช้พื้นที่ประมาณ 1.4 MB และ Base64 ของภาพนี้จะเป็นข้อความเกือบ 1.9 MB
แปลงเป็น PNG ก่อนเข้ารหัส
PNG เป็นรูปแบบไม่สูญเสียข้อมูลเช่นกัน บิตแมป 24 บิตทั่วไปที่แปลงเป็น PNG จึงคงพิกเซลไว้ทุกประการในขณะที่ไฟล์เล็กลง ซึ่งมักเล็กลงหลายเท่า และเล็กลงได้มากกว่านั้นอีกสำหรับภาพหน้าจอและกราฟิกสีพื้น สำหรับภาพถ่ายที่บันทึกเป็น BMP การใช้ JPEG หรือ WebP ที่คุณภาพดีจะได้สตริงที่สั้นลงไปอีก ขนาดต้นฉบับและขนาดหลังเข้ารหัสที่แสดงสำหรับแต่ละภาพช่วยให้เห็นความแตกต่างได้ง่าย
เมื่อใดควรคงไฟล์ BMP ต้นฉบับไว้
ระบบปลายทางบางระบบต้องการบิตแมปจริง ๆ เช่น ซอฟต์แวร์ Windows รุ่นเก่า เครื่องพิมพ์ฉลากและใบเสร็จ จอแสดงผลขนาดเล็กที่ควบคุมด้วยไมโครคอนโทรลเลอร์ หรือไฟล์ทดสอบที่ต้องตรงกับไฟล์อ้างอิงทุกไบต์ ในกรณีเหล่านี้ให้เลือก “คงรูปแบบเดิม” เอาต์พุต Base64 จะเป็นสำเนาที่ตรงกับไฟล์ทุกประการ เบราว์เซอร์หลักทุกตัวแสดงรูปภาพ data:image/bmp ได้ แต่สำหรับหน้าเว็บและอีเมล PNG เป็นรูปแบบที่ดีกว่า
การแปลงแบบเดียวกันในสคริปต์ด้วย Python และ Pillow:
from PIL import Image
import base64, io
buf = io.BytesIO()
Image.open('scan.bmp').save(buf, 'PNG')
uri = 'data:image/png;base64,' + base64.b64encode(buf.getvalue()).decode()
คำถามที่พบบ่อย
ทำไมสตริง Base64 ของ BMP จึงยาวมาก
BMP จัดเก็บทุกพิกเซลโดยไม่บีบอัด และ Base64 ยังเพิ่มขนาดอีกหนึ่งในสาม การแปลงเป็น PNG ก่อนมักทำให้สตริงสั้นลงอย่างมากโดยไม่สูญเสียรายละเอียดใด ๆ
การแปลง BMP เป็น PNG ทำให้คุณภาพลดลงหรือไม่
ไม่ลดลง PNG เป็นรูปแบบไม่สูญเสียข้อมูล พิกเซลจึงเหมือนเดิม มีเพียงวิธีจัดเก็บเท่านั้นที่เปลี่ยนไป
เบราว์เซอร์แสดง URI แบบ data:image/bmp ได้หรือไม่
ได้ Chrome, Edge, Firefox และ Safari แสดง BMP ได้ทั้งหมด แต่โปรแกรมอีเมลและแพลตฟอร์มออนไลน์จำนวนมากรองรับได้ไม่ค่อยดีนัก ในกรณีนั้น PNG จึงเป็นตัวเลือกที่ปลอดภัยกว่า
BMP รองรับความโปร่งใสหรือไม่
BMP แบบ 32 บิตเก็บช่องอัลฟาได้ แต่โปรแกรมและเบราว์เซอร์ต่าง ๆ จัดการกับช่องนี้ไม่สอดคล้องกัน หากต้องการความโปร่งใส ให้แปลงเป็น PNG หรือ WebP