GDで作成した画像をICO形式で出力する

php_gdextra-0.2.0.tgz


Windows ICON (.ico) ファイルフォーマットを調べてみたところ、ヘッダが少し異なるのとマスクデータがあるだけでアイコン本体はBMPだったので、先日のブツICO形式で書き出す関数を追加してみました。
また、BMP出力でも従来の8,24ビットに加え、1,4,32ビットの出力にも対応しました。何ビットで出力するかを明示することはできず、画像の色数によって自動で切り替えます。
ただし32ビット (BITMAPV5,BitFileds,sRGBでヘッダを作成) のBMPに関してはこちらの環境ではアルファチャンネルが無視されるので正しくないかもしれません。同じデータから生成したICOではアルファチャンネルが有効になっているのですが...


一方でGDの関数には同等のものがないので、惜しくはありますがimagegetbmp_ex()を削除しました。
ちなみにPHP5ならImagick::getImageBlob()で画像のバイナリデータを取得できます。


追加した関数:

bool imageicon_ex(resource $image[, string $filename])

画像をICO形式で出力する。
高さまたは幅が256ピクセルより大きい画像を扱うことはできない。

bool imageiconarray_ex(array $images[, string $filename])

複数の画像を一つのアイコンデータにまとめて出力する。
配列の各要素は高さと幅が256ピクセル以内のイメージリソースでないといけない。