ICO を BMP に変換 — 生のピクセル行に

ICO を BMP にする変換は、アイコンの入れ物の中でいちばん大きな絵を、無圧縮 24 ビットのビットマップとして書きます。どの Windows のリーダーも受け入れる素の形式です。その形式にはアルファチャンネルがないので、透明な部分は選んだ色で埋まり、ファイルはかなり大きくなります。

  • 処理される場所 ブラウザーの中です。ファイルがアップロードされることはありません。
  • 非可逆 色はそのまま残ります。BMPは透明部分を保持できないため、切り抜いた箇所は背景色で塗りつぶされます。
  • ファイルサイズの上限 1ファイルあたり100MBまで。無料、アカウント不要です。
  • 知っておきたいこと 変換先の形式は透明を扱えないため、透明だった部分は背景色で塗りつぶされます。

一度に100ファイルまで。フォーマットが混ざっていても構いません。

ICOからBMPへの変換で実際に起きること

ICO 139 KBBMP 450 KB 3.2 倍

なだらかな階調、やわらかい輪郭、粒状感のある写真です。BMPが想定している、あるいは想定していない典型例で、数値がどちらなのかを示します。 どちらの画像もコードで描き、このページで動くのと同じ変換器でエンコードしています。つまりサイズは当サイト自身の出力です。

ICO 7 KBBMP 450 KB 64.4 倍

背景が透明で、図形にグラデーションがかかっています。BMPは両方を保持するか、片方だけ保持するか、透明部分を単色で塗りつぶすかのいずれかです。ここが見落とされがちな差です。 どちらの画像もコードで描き、このページで動くのと同じ変換器でエンコードしています。つまりサイズは当サイト自身の出力です。

ICO 3 KBBMP 450 KB 175.2 倍

インターフェース、グラフ、ロゴのような、平坦な色と硬い輪郭です。上の写真とは挙動がまったく違い、答えが「ファイルの中身による」になる理由でもあります。 どちらの画像もコードで描き、このページで動くのと同じ変換器でエンコードしています。つまりサイズは当サイト自身の出力です。

2 つの形式は近い親戚で、アイコンはアルファを持ち続けました

どちらも Microsoft から出て、一緒に設計されました。元のアイコン形式はそもそも別の画像を包んではおらず、それぞれのエントリはビットマップのヘッダーに続いて色データと、どのピクセルをそのままにするかを示す 1 ビットのマスクを持っていました。ICO は文字どおり、型紙の付いたディレクトリの中のビットマップでした。

そこから 2 つは分かれていきました。アイコンは Windows XP で本物の 8 ビットアルファチャンネルを、Vista で PNG のペイロードを運ぶ能力を得ました。今の大きなアイコンエントリはこの PNG を使っています。この変換機が書くビットマットはどちらも得ていない 24 ビットのベースラインです。ですから一方から他方への変換は能力の後退で、相手先が求めているからこそ行うものです。

アルファチャンネルはビットマップが書かれる前に埋められます

符号化器は 1 ピクセルあたり 24 ビット——青 8、緑 8、赤 8——だけを書き、それ以外は何もありません。アルファチャンネルを定義する BMP のヘッダー変種は存在し、それを使うファイルもありますが、確実に読めるソフトはほとんどなく、それこそ BMP が選ばれる理由である信頼性の問題そのものです。

ですから透明はどこかへ行かなければならず、それを決めるのが背景色の設定です。既定は白です。ビットマットが描かれる面の色——インストーラーのバナー背景や組み込み表示器のパネル色——を選んでください。透明な角を持つテスト用アイコンでは、結果の角は 255,255,255 と読め、パネルが濃い灰色なら、それは間違った答えになります。

ファイルは 20 倍以上大きくなると見込んでください

これは欠陥ではなく BMP が存在する理由そのものです。すべてのピクセルは中身に関わらず 3 バイトを占めるので、ファイルサイズは結果ではなく算数です。幅かける 3 を 4 の倍数に切り上げ、高さを掛け、54 バイトのヘッダーを足します。

256 ピクセル四方なら 1 行 768 バイトでピクセル部分が 196,608 バイト、合計 196,662 バイトです。元になった 8,471 バイトのテストアイコンと比べると、ビットマットは 23 倍以上の大きさです。行き先に容量の上限があるなら、変換の前にこの掛け算をしておいてください。

アイコンのどの絵がビットマップになるか

ファイルの中でいちばん大きなものです。復号はブラウザー自身のアイコンリーダーが行い、ディレクトリの中でいちばん大きなエントリを返します。16、32、48、256 ピクセルの絵を 4 色で描き、ディレクトリの順番を 3 通りに変えて確認しても、256 ピクセルの絵が毎回選ばれました。

より小さいエントリはどこにも書かれず、それに届く設定もありません。渡すソフトが 32 ピクセルのビットマットを求めていて、アイコンが 32 ピクセルのエントリを持っているなら、GIMP のようなアイコン編集ソフトでその層を直接書き出すほうが、256 ピクセル版を縮小するよりよい結果になります。

行は下から上へ、チャンネルの順序も直感と違います

ファイルを開くのではなくバイトを読む場合に知っておくべき 2 点があります。BMP は画像の下から上へ行を保存し、各ピクセルを青、緑、赤の順で保存します。どちらも仕様どおりで、どちらも初めて解析する人を驚かせます。

すべての行は 4 バイトの倍数まで詰められ、これは幅が中途半端なときに重要です。幅 33 ピクセルのビットマットは 1 行あたり色データ 99 バイトにパディング 1 バイトが加わり、保存される行は 100 バイトになります。256 ピクセルなら行は 768 バイトでパディングが不要になり、アイコンサイズのビットマットが手作業で扱いやすい理由の 1 つです。

なぜいまだに無圧縮ビットマップを求めるものがあるのか

読むのに復号器が要らないからです。小さな表示器を駆動するマイクロコントローラーは、ループとヘッダーのオフセットだけでファイルからフレームバッファーへバイトをコピーできます。そのファームウェアに PNG の復号器を足すことは、32 KB しか RAM を持たないかもしれない機器に、展開器とメモリー確保とチャンク解析器を足すことを意味します。

同じ理屈がインストーラーのリソースにも、プラットフォーム自身のビットマップ関数を通じてリソースを読み込む古い Windows のコントロールにも、符号化方式を介さずバイト単位で画像を比較したいテストの土台にも当てはまります。そのどれにおいても、予測可能性はサイズよりはるかに価値があります。

絵そのものは途中で劣化しません

どちらの形式も可逆で、この経路には品質設定がありません。取引する対象がないからです。平坦化を生き延びたすべてのピクセルは、アイコンが保存していたものとビット単位で一致するので、同じファイルを 2 回変換しても結果は同一で、あとで再びこの工程を通っても世代劣化を心配する必要はありません。

本当に失われる 2 つは、背景色に置き換わるアルファチャンネルと、入れ物の中の他のエントリです。どちらもビットマットから後で回復できないので、これが元のアイコンファイルを置き換えるのではなく保持しておくべき理由です。

押し返して PNG を提供すべきとき

行き先が厳密な要件ではなく好みとして述べる現代のソフトなら、PNG は 2 桁小さく、透明も保ちます。同じテストアイコンは PNG として 1,737 バイト、ビットマットとして 196,662 バイトでした。BMP が本当に必要かどうかをメールで一度確認する価値のある差です。

答えが「はい」の場合——ファームウェア、インストーラーのスクリプト、バイト単位で比較するテスト——ビットマットは正しく、そのサイズは復号器なしで読める代償です。それをコミットメッセージに書いておいてください。小さなアイコンに対する 200 KB のファイルは、次にレビューする人には間違いのように見えます。

インストーラーやパネル用にアイコンのフォルダーをまとめて変換する

セット全体を置いてください。それぞれのファイルが復号され、同じ背景色で平坦化され、別々に書き出され、まとめて ZIP で返ります。バッチ全体で共通の背景色を使うのが、これらの行き先ではたいてい正しい選択です。画像は 1 つの面に合成されるからです。

結果の寸法は思い込まず確認してください。何年もかけて作られたアイコンセットは、256 ピクセルに達するエントリと 32 ピクセルで止まるエントリが混ざっていて、ビットマットもその幅を引き継ぎます。両極端でファイルサイズに 64 倍の差が出ます。

ICO を BMP に変換する手順

  1. お手元の ICO ファイル をこのページに落とすか、押してファイルを選んでください。
  2. 変換先に BMP を選びます。変換はブラウザーの中で行われ、ファイルはアップロードされません。
  3. できあがった BMP ファイル をダウンロードします。

ICO と BMP——何が変わるか

ICOとBMPの比較
ICOBMP
正式名称Windows アイコンWindows ビットマップ
拡張子.ico.bmp, .dib
メディアタイプimage/x-iconimage/bmp
圧縮方式可逆 — 何も捨てない無圧縮
最初の公開19851987
発行元MicrosoftMicrosoft
ライセンス公開仕様、標準化はされていない公開仕様、標準化はされていない
現在の位置づけ限定的旧式、ただし今もどこでも読める
ビット深度88
扱える色RGB, インデックスカラーRGB, インデックスカラー
最大の画像1辺 256 px
ブラウザで開けるかすべてのブラウザすべてのブラウザ
代わりに検討される形式PNG, SVGPNG, TIFF

失われるもの

BMP にはアルファチャンネルがありません。透明を含む ICO ファイル から出てくると、その部分は塗りつぶされています——指定がなければ白です——そして BMP 側のどの設定でも、その透明を取り戻すことはできません。

結果を開く

GIMPは ICO と BMP のどちらも読めるので、別のプログラムを開かずに、結果を元のファイルと並べて確かめられます。

ファイルサイズと品質

BMP はサンプルを生のまま持つので、ファイルは大きく膨らみ、その見返りはありません。この向きに意味があるのは、受け取る側のプログラムが ICO を扱えない場合だけで、実際たいていはそれが理由です。

どちらの形式が何のためのものか

2 つは狙っている用途が違います。ICO はウェブ、BMP はプログラム間のデータ受け渡しです。ここは考える価値があります。一方が存在する理由が、そのままもう一方が使いにくい理由になっていることが多いからです。

ICO は Microsoft の形式です(1985 年に登場)。 記録は 1 チャンネルあたり 8 ビットです。

BMP は Microsoft の形式で、1987 年から使われています。Microsoft Paint、GIMP、IrfanViewがこの形式を読めます。

ICO から BMP:よくある質問

ICO ファイル はどこかにアップロードされますか。

いいえ。この変換は完全にブラウザーの中で行われるので、ファイルが端末から出ることはありません。ご自分で確かめられます。開発者ツールのネットワークタブを開いて、何か変換してみてください。ページそのものと、このサービスの費用をまかなっている分析・広告のリクエストは見えますが、あなたのファイルを運んでいるリクエストはひとつもありません。

ICO から BMP への変換は無料ですか。

はい。アカウントも透かしもなく、消費される 1 日の割り当てもありません。お使いの機械の上で動くので、何度でも戻ってきていただけます。ブラウザーが扱えるのは 100 MB までのファイルで、一度に 100 本です。

ICO を BMP に変換すると品質は落ちますか。

BMP は圧縮するので、データはいくらか失われます。初期設定では気づかない程度ですが、確実にしたい場合は品質を上げてください。 変換先の形式は透明を扱えないため、透明だった部分は背景色で塗りつぶされます。

ICO から BMP にすると、透明な背景は残りますか。

BMP にはアルファチャンネルがありません。透明を含む ICO ファイル から出てくると、その部分は塗りつぶされています——指定がなければ白です——そして BMP 側のどの設定でも、その透明を取り戻すことはできません。

BMP ファイル が ICO ファイル よりずっと大きいのはなぜですか。

BMP はサンプルを生のまま持つので、ファイルは大きく膨らみ、その見返りはありません。この向きに意味があるのは、受け取る側のプログラムが ICO を扱えない場合だけで、実際たいていはそれが理由です。

これらのフォーマットについて