BMP 轉 Base64 工具

將 Windows 點陣圖(.bmp)檔案編碼為 Base64。BMP 通常沒有壓縮,可以先轉換為 PNG、JPEG 或 WebP,得到短得多的結果。

完全在瀏覽器中執行,不會上傳任何資料。

使用方法

  1. 將 .bmp 檔案拖到上傳區域,點選選擇檔案,或貼上圖片。
  2. 把目標格式設為 PNG,即可得到無損且小得多的結果;如果接收方必須使用 BMP,則保持原格式。
  3. 對比原始大小和編碼後大小,看看節省了多少。
  4. 以 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。