BMP ファイルの中身
BMP(ビットマップ)は、Windows が初期のバージョンから使ってきた画像形式です。画像ファイルとしてはこれ以上ないほど単純で、画像についての短い説明のあとに、全ピクセルの色が順番に並んでいるだけです。
ヘッダー、パレット、ピクセル
BMP は 14 バイトのファイルヘッダーと、幅・高さ・色深度を記録した情報ヘッダーから始まります。256 色以下の画像は、続いてパレットに色の一覧を持ちます。その後にピクセルが 1 行ずつ並び、通常は画像の最下行から上へ向かって保存されます。
ビット深度
ビット深度は、1 ピクセルに収まる色数を決めます。1 ビットのビットマップは白黒、4 ビットは 16 色、8 ビットは 256 色、24 ビットは 1,670 万色です。32 ビットの BMP は 4 バイト目を持ち、これを透過に使うプログラムもあれば、単なる埋め草として扱うプログラムもあります。
BMP が今も使われる理由
構造が単純なので、BMP はどんなプログラムや機器でも簡単に書き出せます。古いゲーム、Windows のユーティリティ、スプライトエディター、組み込みディスプレイは今も BMP を出力するため、BMP PNG 変換は今でもよくある作業なのです。
BMP ファイルが大きい理由
ほとんどの BMP はまったく圧縮されていません。ファイルサイズは単純に「幅 × 高さ × 1 ピクセルあたりのバイト数」に、わずかな埋め草を足したものです。
計算してみる
フル HD のスクリーンショットは 1920 × 1080 ピクセルです。24 ビットなら 1 ピクセル 3 バイトなので約 6.2 MB になり、画面に写っていたのが情報量の多い写真でも真っ白なページでも変わりません。同じスクリーンショットを PNG にすると、数百キロバイトで済むことがよくあります。
行の埋め草
ピクセルの各行は 4 バイトの倍数になるよう埋められます。大きな画像ではほとんど影響しませんが、BMP が画像をいかに文字どおりに保存しているかがよくわかります。容量を節約しようとせず、1 バイトずつそのまま記録しているのです。
圧縮された BMP もあるが、まれ
この形式では 4 ビットと 8 ビットの画像に単純なランレングス圧縮を使えるため、広い単色部分には効果があります。ただしほとんどのプログラムは使わず、24 ビットのビットマップではそもそも使えません。
BMPをPNGに変換すれば、ピクセルにひとつも手を加えずにこの無駄がなくなります。PNG が多くの場合 80〜95% 小さくなるのはそのためです。結果リストには、ファイルごとの正確な削減量が表示されます。
BMPをPNGに変換する方法(3 ステップ)
BMP ファイルをドロップ
1 つ以上の .bmp ファイルを点線のエリアにドラッグするか、クリックして選択します。各ファイルはブラウザ内で読み込まれ、何もアップロードされません。
PNG を選択したままにする
PNG が初期設定で、ロスレスです。ビットマップが純粋なマゼンタの上に描かれたスプライトなら、「マゼンタ(#FF00FF)を透明にする」にチェックを入れてください。
PNG ファイルをダウンロード
各ファイルの横にある「ダウンロード」か、「すべて ZIP でダウンロード」をクリックします。各結果には、ビットマップのビット深度と、PNG がどれだけ小さくなったかが表示されます。
BMP ファイルを 1 つ以上ドロップします。
PNG のままにし、スプライトならマゼンタのオプションをオンにします。
PNG を 1 つずつ、またはまとめて ZIP でダウンロードします。
BMP PNG 変換がロスレスである理由
PNG は何も捨てずに圧縮します。同じピクセルが並んだ行や繰り返すパターンといった反復を見つけ、それを 1 回だけ保存するのです。
同じピクセルで、より小さなファイルに
PNG に変換した BMP をデコードすると、元のビットマップとまったく同じピクセルになります。色、輪郭、文字はすべて同一のままです。1 ピクセルの変化でも目に見えてしまうスクリーンショット、UI モックアップ、ピクセルアートでは、これが重要になります。
パレット画像はパレット画像のまま
1・4・8 ビットのビットマップは、最大 256 色のパレットを使います。この変換ツールはそれらをフルカラーに展開せず、1 ピクセル 1 バイトのパレット PNG として保存します。これで PNG を可能なかぎり小さく保てます。
32 ビットのビットマップは?
32 ビットの BMP が透過チャンネルを宣言していて、ブラウザがそれを読み取れる場合、PNG でも透過が保たれます。ただし多くのプログラムは 4 バイト目を単なる埋め草として書き込むため、その場合のビットマップは単に不透明です。
マゼンタ背景:#FF00FF を本当の透明に
ゲームやエミュレーター、古い Windows のツールバーから出てきた BMP ファイルには、どぎついピンクの背景がよく見られます。これは意図的なものです。透過に対応した形式が普及する前、開発者は透けさせたい部分を、アートワークにはまず使われない純粋なマゼンタで塗り、プログラムにその色を飛ばして描画させていました。
ワンクリックで透過 PNG に
「マゼンタ(#FF00FF)を透明にする」にチェックを入れると、ちょうどその色のピクセルがすべて PNG で透明になります。結果リストには変更されたピクセル数が表示されるので、うまくいったかどうか確認できます。
完全一致のみ
置き換わるのは純粋な #FF00FF だけです。アンチエイリアスのかかった輪郭のように、マゼンタに近いだけの色はそのまま残るため、このオプションがアートワーク自体を削ってしまうことはありません。
純粋な緑や黒など、別のキーカラーを使ったゲームも一部あります。このオプションが扱うのは、圧倒的に多く使われているマゼンタです。それ以外のキーカラーは画像編集ソフトで除去するほうが適しています。
BMP と PNG の比較
| BMP | PNG | |
|---|---|---|
| 圧縮 | 通常はなし | ロスレス(Deflate) |
| スクリーンショットの一般的なサイズ | 数メガバイト | 数百キロバイト |
| 透過 | まれで、対応もまちまち | 完全なアルファチャンネル |
| ブラウザやアプリで開けるか | おおむね開けるが、Web サイトではほとんど受け付けられない | どこでも |
| 最適な用途 | シンプルなプログラムや機器 | スクリーンショット、アイコン、グラフィック、Web |
BMP PNG 変換が適しているとき
輪郭がくっきりした画像、単色の多い画像、文字を含む画像なら、PNG は BMP の自然な置き換え先です。
PNG に最適なもの
- 古い Windows ツールのスクリーンショットやアプリ画面。
- アイコン、カーソル、ピクセルアート。
- 図、グラフ、ロゴ。
- スプライトシートやゲームのテクスチャ(必要に応じてマゼンタのオプションを使用)。
JPG のほうが良いとき
写真やスキャン画像には細かなノイズが含まれており、ロスレス圧縮ではあまり小さくできません。そうした画像は BMP JPG 変換を使えば、見た目の違いなしに何分の一ものサイズになります。
あえて BMP を残す場合
機器やブート画面、マイコンのディスプレイの中には BMP しか受け付けないものがあります。そうした用途には元のファイルを残し、それ以外では PNG を使いましょう。
BMPをPNGに変換したあとは
PNG をさらに小さくするなら PNG 圧縮にかけましょう。Web サイト用なら、PNG から WebP で透過を保ったままさらに小さなファイルにでき、画像リサイズで正確な寸法に揃えられます。
写真なら代わりに BMP JPG 変換を使ってください。そのほかの形式の組み合わせは画像変換ツールにまとめています。