歴史レッスン:.ico ファイルとは? Windows のアイコン形式
Windows のアイコン形式 — 複数のサイズと色深度を 1 つに収めるファイル、先頭の小さなヘッダーとディレクトリ、Windows Vista 以降の PNG 圧縮画像、カーソル用の兄弟形式 .cur、そして今もあらゆる Web サイトが応答する favicon.ico。

TL;DR
.ico は Windows のアイコンファイルです。1 つのファイルに、同じアイコンの複数の画像をさまざまなサイズと色深度で収められ、Windows はデスクトップ、タイトルバー、ダイアログに最適なものを選びます。構造はシンプルで、6 バイトのヘッダー(予約値、種類、画像数)、画像ごとの 16 バイトのディレクトリエントリ、そして画像データが続きます。従来のエントリは透過用の AND マスクを持つビットマップ(DIB)データですが、Windows Vista 以降は完全な PNG をエントリにでき、256×256 のアイコンが現実的になりました。カーソル形式 .cur はほぼ双子です(種類が 1 ではなく 2、さらにホットスポット)。Web では Internet Explorer 5(1999 年 3 月)がサイトのルートから favicon.ico を要求し始めました。普通の画像として使うには .ico を PNG にローカルで変換しましょう。Legacy File Converter ならご自身の PC 上で変換でき、何もアップロードされません。
.ico ファイルとは?
.ico ファイルは Windows のアイコン形式です。多くの画像ファイルは 1 枚の画像を持ちますが、ICO ファイルが持つのはアイコンリソース、つまり同じアイコンを異なるサイズや色深度で描いた画像の小さなコレクションです。Microsoft 自身の解説である John Hornick 氏の記事「Icons」(1995 年 9 月 29 日付)は、1 つの ICO ファイル、あるいは EXE や DLL 内のアイコンリソースには、サイズや色深度の異なる複数のアイコン画像を含められると明言しています。
そのため「.ico ファイルとは」という検索は、プログラムのフォルダーや Web からのダウンロード、古いプロジェクトで見つけたファイルを写真ビューアーで開いたら小さな四角しか出ない、あるいは何も表示されない、という人から来ることがほとんどです。ファイル自体は正常で、普通の写真ではなくアイコン画像のコンテナーなのです。関連形式は 歴史レッスン:.bmp ファイルとは? と 歴史レッスン:.png ファイルとは? をご覧ください。
初期の Windows アイコンと「1 サイズ」の時代
アイコンは Windows の最初期のデスクトップ環境から存在しますが、初期のシステムはアイコンのサイズを 1 つしか想定していませんでした。Microsoft の 1995 年の記事は、LoadIcon、ExtractIcon、DrawIcon といった元々の関数は「システムがアイコンサイズを 1 つしか定義していなかった 16 ビット時代の名残」であり、受け取った画像を標準の大サイズに引き伸ばすと述べています。
Windows 95 とその後の Windows NT 系では、システムとシェルの両方で小さいアイコンと大きいアイコンを扱うようになり、新しい関数(Ex 版、LoadImage、DrawIconEx)で特定のサイズを要求できるようになりました。1995 年のガイダンスは、少なくとも 16 色の 16×16 と 32×32、256 色の 48×48 を用意するよう開発者に勧めています。形式自体は以前から珍しいサイズも格納できました。Windows のほうがそれを使えるよう追いついたのです。
1 つのファイルに、多くのサイズと色深度
Windows はアイコンが必要になると、リソース内の画像を調べます。Microsoft の 1995 年のルールでは、要求に最も近いサイズの画像を選び、同じサイズが複数あれば画面の色深度に一致するものを、なければそれを超えない範囲で最も深いものを選びます。小さいサイズは単なる縮小コピーではなく、16×16 でも読みやすいようデザイナーが描き直すことがよくあります。
その後の Microsoft の Windows Vista アイコンガイドラインでは、アプリケーションアイコンの完全なセットを 16×16、32×32、48×48、256×256 とし、32 ビット(アルファ含む)の画像に加えて、リモートデスクトップなどのために 8 ビットと 4 ビットのパレット版も求めています。小さな .ico に 12 枚以上の画像が入っていることもあり、アイコンエディターで開くとまさにそれが見えます。
画像は多数、アイコンは 1 つ
ビューアーで見た目の違う画像や極小の画像が表示されたら、複数のエントリから 1 つを選んだ可能性が高いです。PNG への変換は通常、エントリ(普通は最大のもの)を 1 つ選んで書き出すことを意味します。
.ico ファイルの構造
構造は 1 段落で説明できます。ファイルは 2 バイトのワード 3 つからなる ICONDIR ヘッダーで始まります。0 でなければならない予約値、アイコンでは 1 となる種類、そして画像の数です。続いて画像ごとに ICONDIRENTRY(各 16 バイト)があり、幅、高さ、色数、プレーン数、ピクセルあたりのビット数、画像データのバイト数、そしてファイル内でデータが始まるオフセットを示します。
従来の画像はそれぞれ DIB(デバイス独立ビットマップ)で、BITMAPINFOHEADER、省略可能なカラーテーブル、XOR マスク(色のピクセル)、透過部分を示す 1 ビットの AND マスクで構成されます。Microsoft は典型的な落とし穴を指摘しています。ヘッダーの高さは両マスクを合わせた高さなので、実際のアイコンの高さの 2 倍に見えるのです。同じ系統として、EXE や DLL に格納されたアイコンも、RT_GROUP_ICON と RT_ICON リソースとしてほぼ同じ構造を使います。
Windows Vista 以降、アイコンの中に PNG
アイコンが大きくなるとビットマップデータは重くなります。Windows Vista のアイコンのデコードを扱った 2008 年の MSDN Magazine の記事は、ビットマップが大きくなるにつれディスクとメモリを消費しすぎるようになったため、Microsoft が PNG を選んだと説明しています。Windows Vista のアイコンは DIB の代わりに PNG 画像を埋め込めるため、256×256・32 ビットのアイコンをわずかなサイズで実現できました。Vista のガイドラインでは、圧縮するのは 256×256 の画像だけにし、小さいサイズは従来形式のままにするよう述べています。
1 バイトの幅・高さフィールドには 256 を格納できないため、ディレクトリエントリの 0 は 256 と解釈されます。Vista 以前に書かれたソフトにとって PNG 圧縮のエントリは未知のデータであり、Windows 自体は問題なく表示できるのに、古いツールが最新の .ico ファイルでつまずく理由の 1 つになっています。
古いツール、新しいアイコン
Windows XP 時代のエディターは、最新アイコンの小さなビットマップエントリは開けても、256×256 の PNG エントリで失敗したり、ファイル全体を拒否したりすることがあります。アイコンが壊れているのではなく、ツールが ICO 内 PNG の追加より古いだけです。
カーソル用の兄弟形式 .cur
マウスポインターは、拡張子 .cur のほぼ同じ形式を使います。Microsoft の 1995 年の記事は、カーソルは「アイコンとよく似ている」と述べ、サンプルのアイコンエディターもチェックを 1 つ緩めるだけで .CUR ファイルを読めたとしています。ヘッダーの種類がアイコンの 1 ではなくカーソルでは 2 になる点です。2008 年の MSDN の記事も、2 番目のワードはアイコンなら 1、カーソルなら 2 と同じルールを繰り返しています。
カーソルの重要な追加要素はホットスポット、つまりポインターの先端とみなされるピクセルの座標です。Raymond Chen 氏が The Old New Thing で説明しているように、カーソルの画像リソースはビットマップデータの前にホットスポットの x 座標と y 座標で始まります。アニメーションカーソル(.ani)は別の形式で、このレッスンの対象外です。
Web の favicon.ico
.ico 形式はブラウザーを通じてデスクトップの外へ広がりました。1999 年 3 月にリリースされた Internet Explorer 5 は、ユーザーがサイトをお気に入りに追加すると、そのサイトのルートから favicon.ico という名前のファイルを要求し、お気に入り一覧にそのアイコンを表示しました。Raymond Chen 氏は後に、サーバーに負荷をかけないよう、IE は毎回の訪問ではなくお気に入りに追加したときにだけそれを探したと説明しています。ページは HTML の link 要素で別の場所を指定することもできました。
現在のブラウザーはサイトアイコンに他の形式も受け付けますが、多くのサイトは今もルートに favicon.ico を置いています。Microsoft の IE チームは、複数のサイズを格納できる ICO の特長が、タブ、お気に入り、ショートカットなどサイトアイコンが表示される多くの場所に合っていると述べています。ダウンロードフォルダーにある .ico は、Web から保存したサイトアイコンにすぎないことも多いのです。
.ico を PNG にローカルで変換する方法
.ico を .png にリネームしても機能しません。ファイルは PNG シグネチャではなく ICONDIR ヘッダーで始まり、多くの画像を含むことがあるからです。本当の変換では、ディレクトリを読み、エントリ(通常は最大のもの)を選び、ビットマップまたは PNG データをデコードし、透過マスクを適用して、アルファチャンネルを保った通常の PNG を書き出します。透過が不要な場合にだけ JPG を選びましょう。
Legacy File Converter は、ご自身の Windows PC 上で .ico ファイルを開き、PNG または JPG に変換します。何もアップロードされないので、アイコンが顧客のプロジェクトや社内アプリのものでも安心です。古いアイコンセットのようなレガシーファイルを、どのアプリでも開ける画像に静かに変えられます。関連レッスンは BMP、PNG、WebP をご覧ください。
関連記事
古いファイルを開く準備はできましたか?
無料で始めて、買い切りの $79.95 Standard ライセンスで無制限変換を解除。Windows インストーラーをダウンロード — 最大 10 ファイルまで全機能。
無料トライアル
アプリの全機能 · 最大 10 ファイル
Windows 10 または 11
これまでどおりの無料トライアル — Windows インストーラーをダウンロードして、PC 上でローカルに変換できます。
直接 Windows インストーラー · オフライン MSI
安全ですか? — 発行元、インストーラー、SmartScreen のヘルプ
Windows 10 または 11 が必要です。サブスクリプションなし。100% Windows ネイティブ。