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

php_gdextra-0.1.0.tgz


GDエクステンションと連携して使う、画像処理のための新作エクステンションです。
表題の機能のほか、ImageMagickを使って読み込んだ画像をGDの画像リソースに変換して返す機能もあります。
PHP5なら素直にimagickエクステンションを使った方が対応フォーマットも機能も多くて良いのですが、既存のコードをなるべく変更することなく多くの画像形式を読み込みたい、またはBMPで出力したい、といったときに有用だと思います。
読み込みにはImageMagickライブラリを、BMPの書き出しには自前のコードを使っています。


インストールはいつもの手順で。--with-wand-configでImageMagickのインストールディレクトリかWand-configのフルパスを指定します。

tar xfz php_gdextra-0.1.0.tgz
cd php_gdextra-0.1.0
phpize
./configure --enable-gdextra --with-wand-config=/usr/local
make
sudo make install

PHPのヘッダファイルとImageMagickのヘッダファイルで重複しているマクロがあるためにmakeで警告がいくつか出ますが、特に問題はないようです。


サンプル:

<?php
// TIFFからイメージリソースを作成する
$im1 = imagecreatebymagick('sample.tif');

// GIFとして書き出し、それを元にイメージリソースを作成する
imagegif($im1, 'sample.gif');
$im2 = imagecreatefromgif('sample.gif');

// TrueColorイメージからは24bits/pixelのBMPが作成される
imagebmp_ex($im1, 'sample1.bmp');

// インデックスカラーイメージからは8bits/pixelのBMPが作成される
imagebmp_ex($im2, 'sample2.bmp');
?>


関数の説明:

resource imagecreatebymagick(string $filename)

filenameから画像を読み込み、イメージ関数で扱うための画像リソースを返す。
読み込みに失敗したときはE_WARNINGを発生してfalseを返す。
画像形式は自動で判定され、対応する画像形式はリンクしているImageMagickのそれによる。
元の画像がインデックスカラー画像でも作成される画像はTrueColor。
TrueColorからインデックスカラーへの変換はimagetruecolortopalette()で。

resource imagecreatefromstring_ex(string $data)

画像データからイメージ関数で扱うための画像リソースを返す。
引数がファイル名かバイナリデータかという点を除いてはimagecreatebymagick()と同じ。
imagecreatefromstring()の対応フォーマットが多いバージョンのようなもの。

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

画像を非圧縮のBMP形式で出力する。
TrueColorの画像からは24bits/pixelの、インデックスカラーの画像からは8bits/pixelのBMPを出力する。
GDの次期バージョン(2.1.0)でもBMPがサポートされるかもしれないので、かぶらないように関数名をimagebmp_ex()とした。

string imagegetbmp_ex(resource $image)

画像をBMP形式で取得する。