BMP Base64 変換ツール

Windows ビットマップ(.bmp)ファイルを Base64 にエンコードします。BMP は通常非圧縮のため、先に PNG、JPEG、WebP に変換すれば、結果をはるかに短くできます。

すべてブラウザ内で処理され、データはアップロードされません。

使い方

  1. .bmp ファイルをドロップエリアにドロップするか、クリックして選択するか、画像を貼り付けます。
  2. ロスレスのまま大幅に小さくするには、「変換形式」で PNG を選びます。受け取る側のシステムが BMP を必要とする場合は BMP のままにします。
  3. 元のサイズとエンコード後のサイズを比べて、削減量を確認します。
  4. 結果を data URI、Base64 文字列のみ、img タグ、CSS ルール、Markdown の画像としてコピーまたはダウンロードします。

BMP ファイルとは

BMP は、Windows のデバイス非依存ビットマップ形式です。ピクセルを 1 行ずつ格納し、ほとんどの場合は圧縮しません(4 ビットと 8 ビットの画像には簡単なランレングス圧縮モードがあります)。MIME タイプは image/bmp ですが、image/x-ms-bmp と報告するシステムもあります。Base64 の出力は、文字 BM をエンコードした Qk で始まります。

圧縮しないため、サイズは画像の寸法から直接決まります。800×600 ピクセルの 24 ビット画像は約 1.4 MB になり、その Base64 は 1.9 MB 近いテキストになります。

エンコード前に PNG に変換する

PNG もロスレスなので、一般的な 24 ビットのビットマップを PNG に変換すると、ピクセルはまったく同じままファイルが小さくなります。数分の 1 になることも多く、スクリーンショットや平坦なグラフィックではさらに大きく縮みます。BMP で保存された写真なら、十分な品質の JPEG や WebP にすると、文字列はさらに短くなります。画像ごとに元のサイズとエンコード後のサイズが表示されるので、違いがひと目でわかります。

元の BMP のままにすべき場合

受け取る側が本物のビットマップを必要とする場合があります。古い Windows ソフトウェア、ラベルプリンターやレシートプリンター、マイコンで制御する小型ディスプレイ、バイト単位で一致する必要があるテスト用ファイルなどです。こうした場合は変換しないでください。Base64 の出力はファイルの正確なコピーになります。主要なブラウザはすべて data:image/bmp の画像を表示できますが、Web ページやメールには 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 がさらに 3 分の 1 を上乗せするためです。先に PNG に変換すれば、細部を一切失わずに文字列を劇的に短くできるのが普通です。

BMP を PNG に変換すると画質は落ちますか?

いいえ。PNG はロスレス形式なので、ピクセルは変わりません。変わるのは格納方法だけです。

ブラウザは data:image/bmp の URI を表示できますか?

はい。Chrome、Edge、Firefox、Safari はいずれも BMP を表示できます。メールクライアントや多くのオンラインプラットフォームでは扱いが不安定なため、そうした場面では PNG のほうが安全です。

BMP は透過に対応していますか?

32 ビットの BMP はアルファチャンネルを格納できますが、プログラムやブラウザによって扱いがまちまちです。透過が必要な場合は PNG または WebP に変換してください。