ファビコン


ファビコンというのは、ブラウザでタイトルの左横に表示される小さなアイコンです。

そのサイトの顔ともいうべき、ロゴです。

favicon
Figure 1. Firefox の場合


このページでは、ファビコンのファイル形式について語りたいと思います。

ファビコンは、ICOフォーマットというファイル形式で記述されます。

16ビットx16ビット、あるいは32ビットx32ビットのビットマップです。

さっそく中身を見てみましょう。


ヘッダー


ヘッダーには、ファイルタイプとアイコンの数が記述されます。

struct 
{
  char reserved[2];
  char type[2];
  char count[2];
}header;


ディレクトリ


アイコン画像データの、ディレクトリともいえるインデックスの部分です。

アイコンのサイズと、データの記述箇所のオフセットが記述されます。

アイコン数だけ、繰り返されます。

struct
{
  char width;
  char height;
  char colorCount;
  char reserved;
  char planes[2];
  char bitCount[2];
  char sizeInBytes[4];
  char fileOffset[4];
}entry;


ビットマップ

ビットマップのヘッダー


ビットマップ情報の詰まったヘッダーです。

ビットマップの大きさ、色情報が記述されます。

ここで、ビットマップの高さは倍になっています。

後に述べるAND/XOR操作のためです。

struct
{
  char size[4];
  char width[4];
  char height[4];
  char planes[2];
  char bitCount[2];
  char compression[4];
  char imageSize[4];
  char xPixelsPerM[4];
  char yPixelsPerM[4];
  char colorUsed[4];
  char colorsImportant[4];
}infoHeader;

カラー・マップ


ビットマップでは、ファイルサイズを節約するために、マッピングを行います。

データと、対応する色を、colorCountだけ用意します。

bitCountが8ビット以上であると、カラー・マップは省略されます。

struct
{
  char red;
  char green;
  char blue;
  char reserved;
}colors;


XORビットマップ


画像のビットマップです。

4バイトあるいは32ビットのチャンクとして記述され、0でパディングされます。


ANDビットマップ


続くANDビットマップとは、マスキングのための情報です。

1であれば保存、0であれば消去されます。


File(s)Description
ico.txtICOフォーマットを読むプログラム
inserted by FC2 system