Image_Transform の主な使い道は、画像のサムネイルを作成することです。
Image_Transform を使う際に最初にすることは、 Image_Transform_Driver のインスタンスを 静的メソッド factory() で作ることです。 このメソッドにドライバ名を渡せば、インスタンスを取得することができます。
注意 ドライバ名を省略することもできます。省略した場合、Image_Transform は Imagick2、GD そして Imlib の順にドライバを探し、 最初に見つかったものを使用します。
これで、あとは load() にファイル名を指定すれば画像を読み込めるようになります。 倍率変更用のメソッドのひとつを使用したら、最後は save() で保存します。
警告 |
倍率変更用のメソッドを、一度に複数使用することはできません。 ひとつ使用したら、まず保存する必要があります。 |
例 49-2画像の縮小
|
上の例では一切エラーチェックをしていません。 すべてのメソッドは PEAR_Error オブジェクトを返します。 返り値をチェックするか、あるいは PHP 5 の場合はグローバル PEAR エラーハンドラを設定してエラー時に例外をスローさせるようにします。 これは、発生することがわかっているけれどもあえて無視している というエラーがある際などに問題となります。 (特に他のパッケージと併用する場合など) この方式を使用する際には注意しましょう。
例 49-3画像の倍率変更に、エラーチェックを追加したもの
|
Image_Transform パッケージは、ドライバなしでは使えません。 ドライバは、グラフィックライブラリのメソッドをカプセル化したものです。 2008 年 4 月時点では、このパッケージのドライバには次のようなものがあります。 これらをインストールして使用することができます。
Image_Transform_Driver_GD - GD 2 拡張モジュールのメソッドを使用
Image_Transform_Driver_Imagick2 - imagick PECL 拡張モジュール バージョン < 2.0 用
Image_Transform_Driver_Imagick3 - imagick PECL 拡張モジュール バージョン >= 2.0 用
Image_Transform_Driver_Imlib - PHP の imlib 拡張モジュールを使用
Image_Transform_Driver_IM - Imagick バイナリ実行ファイル (拡張モジュールがインストールされていない場合用)
Image_Transform_Driver_NetPBM - NetPBM パッケージのバイナリ実行ファイル pnmscale を使用
Image_Transform には、 画像の拡大や縮小をおこなうさまざまなメソッドがあります。 そのほとんどは、基本的なサイズ変更のメソッドを さまざまなパラメータでコールするだけのものです。 実行結果は同じですが、利便性を確保するために用意されています。 ここで、これらのメソッドについて簡単にまとめておきます。
resize - 汎用のサイズ変更メソッド。サイズ、パーセンテージ (% つきの文字列) あるいは倍率を x と y の両方について指定します。0 にすると現在のサイズを維持します。 アスペクト比を維持する必要はありません。
scaleByX - 画像の幅を指定したピクセルに変更します。アスペクト比を維持します。
scaleByY - 画像の高さを指定したピクセルに変更します。アスペクト比を維持します。
scale - 汎用の拡大・縮小関数。ピクセル値、パーセンテージ (% つきの文字列) あるいは倍率 (<1) を指定します。アスペクト比を維持します。
scaleByPercentage - 指定したパーセンテージに拡大・縮小します。
scaleByFactor - scaleByPercentage() と同じで、 単に与える数値が 100 分の 1 になったものです。
scaleByLength - 長辺が指定したサイズになるように拡大・縮小します。
fit - 画像を縮小し、(幅と高さを指定した) ボックスにフィットするようにします。 既にそのボックスにおさまる大きさである場合は何も行いません。
fitX - 幅が指定したサイズになるように画像を縮小します。 既にそのサイズより幅が小さい場合は何も行いません。
fitY - 高さが指定したサイズになるように画像を縮小します。 既にそのサイズより高さが小さい場合は何も行いません。
save() メソッドの必須パラメータは、サイズ変更後の画像を保存する際のファイル名です。 これだけを指定した場合は、新しい画像は元の画像と同じファイル形式で保存されます。
注意 ファイルの拡張子を指定しなかった場合、 自動的に追加されることはありません。
2 番目のパラメータで、保存したい画像ファイル形式にあわせた拡張子を指定することができます。 たとえば png や jpg などです。
エラーが発生した場合 (使用しているドライバがそのファイル形式をサポートしていないなど) は PEAR_Error オブジェクトを返します。
画像を保存せず直接ブラウザに送出するには display() を使用します。
表 49-3ドライバごとの各種メソッドの対応状況
メソッド | GD | Imagick2 | Imagick3 | Imlib | IM | NetPBM |
---|---|---|---|---|---|---|
_resize() | yes | yes | yes | yes | yes | yes |
save() | yes | yes | yes | yes | yes | yes |
display() | yes | yes | yes | yes | yes | yes |
free() | yes | yes | yes | yes | yes | yes |
addText() | yes | yes | yes | yes | yes | yes |
addDropShadow() | - | - | - | - | - | - |
addBorder() | yes | - | - | - | - | - |
crop() | yes | yes | yes | yes | yes | yes |
canvasResize() | - | - | - | - | - | - |
fitOnCanvas() | - | - | - | - | - | - |
flip() | yes | yes | yes | yes | yes | yes |
gamma() | yes | yes | yes | - | yes | yes |
greyscale() | yes | - | yes | - | yes | yes |
mirror() | yes | yes | yes | yes | yes | yes |
normalize() | - | - | - | - | - | - |
rotate() | yes | yes | yes | yes | yes | yes |