使用方法
- 將 .bmp 檔案拖到上傳區域,點選選擇檔案,或貼上圖片。
- 把目標格式設為 PNG,即可得到無損且小得多的結果;如果接收方必須使用 BMP,則保持原格式。
- 對比原始大小和編碼後大小,看看節省了多少。
- 以 Data URI、純 Base64、img 標籤、CSS 規則或 Markdown 圖片的形式複製或下載結果。
什麼是 BMP 檔案?
BMP 是 Windows 的裝置無關點陣圖格式,按行儲存像素,幾乎總是不壓縮(4 位和 8 點陣圖像有一種簡單的行程編碼模式)。它的 MIME 型別是 image/bmp,部分系統會報告為 image/x-ms-bmp;Base64 輸出以 Qk 開頭,也就是字母 BM 編碼後的結果。
由於沒有壓縮,檔案大小直接由尺寸決定。一張 800×600 像素的 24 點陣圖片約需 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()
常見問題
為什麼 BMP 的 Base64 字串這麼長?
BMP 不壓縮地儲存每個像素,Base64 又在此基礎上增加三分之一。先轉換為 PNG 通常能大幅縮短字串,而且不損失任何細節。
BMP 轉 PNG 會降低畫質嗎?
不會。PNG 是無損格式,像素保持不變,改變的只是儲存方式。
瀏覽器能顯示 data:image/bmp 地址嗎?
能,Chrome、Edge、Firefox 和 Safari 都支援 BMP。但郵件客戶端和許多線上平臺對它的支援不太可靠,這些場景下 PNG 更穩妥。
BMP 支援透明嗎?
32 位 BMP 可以儲存 Alpha 通道,但不同程式和瀏覽器的處理並不一致。需要透明效果時,請轉換為 PNG 或 WebP。