Image_Transform

Image_Transform の主な使い道は、画像のサムネイルを作成することです。

一般的な使用法

Image_Transform を使う際に最初にすることは、 Image_Transform_Driver のインスタンスを 静的メソッド factory() で作ることです。 このメソッドにドライバ名を渡せば、インスタンスを取得することができます。

注意 ドライバ名を省略することもできます。省略した場合、Image_TransformImagick2GD そして Imlib の順にドライバを探し、 最初に見つかったものを使用します。

これで、あとは load() にファイル名を指定すれば画像を読み込めるようになります。 倍率変更用のメソッドのひとつを使用したら、最後は save() で保存します。

警告

倍率変更用のメソッドを、一度に複数使用することはできません。 ひとつ使用したら、まず保存する必要があります。

例 49-2画像の縮小


<?php
require_once 'Image/Transform.php';

// 変換ドライバオブジェクトを作成します
$it Image_Transform::factory('GD');

// 元ファイルを読み込みます
$it->load('beach-large.jpg');

// 150px に縮小します
$it->scaleMaxLength(150);

// 別のファイルとして保存します
$it->save('beach-150px.jpg');
?>

上の例では一切エラーチェックをしていません。 すべてのメソッドは PEAR_Error オブジェクトを返します。 返り値をチェックするか、あるいは PHP 5 の場合はグローバル PEAR エラーハンドラを設定してエラー時に例外をスローさせるようにします。 これは、発生することがわかっているけれどもあえて無視している というエラーがある際などに問題となります。 (特に他のパッケージと併用する場合など) この方式を使用する際には注意しましょう。

例 49-3画像の倍率変更に、エラーチェックを追加したもの


<?php
require_once 'Image/Transform.php';

// 変換ドライバオブジェクトを作成します
$it Image_Transform::factory('GD');
if (PEAR::isError($it)) {
    die($it->getMessage());
}

// 元ファイルを読み込みます
$ret $it->load('beach-large.jpg');
if (PEAR::isError($ret)) {
    die($ret->getMessage());
}

// 150px に縮小します
$ret $it->scaleByLength(150);
if (PEAR::isError($ret)) {
    die($ret->getMessage());
}

// 別のファイルとして保存します
$ret $it->save('beach-150px.jpg');
if (PEAR::isError($ret)) {
    die($ret->getMessage());
}
?>

ドライバ

Image_Transform パッケージは、ドライバなしでは使えません。 ドライバは、グラフィックライブラリのメソッドをカプセル化したものです。 2008 年 4 月時点では、このパッケージのドライバには次のようなものがあります。 これらをインストールして使用することができます。

画像の拡大・縮小

Image_Transform には、 画像の拡大や縮小をおこなうさまざまなメソッドがあります。 そのほとんどは、基本的なサイズ変更のメソッドを さまざまなパラメータでコールするだけのものです。 実行結果は同じですが、利便性を確保するために用意されています。 ここで、これらのメソッドについて簡単にまとめておきます。

保存

save() メソッドの必須パラメータは、サイズ変更後の画像を保存する際のファイル名です。 これだけを指定した場合は、新しい画像は元の画像と同じファイル形式で保存されます。

注意 ファイルの拡張子を指定しなかった場合、 自動的に追加されることはありません。

2 番目のパラメータで、保存したい画像ファイル形式にあわせた拡張子を指定することができます。 たとえば pngjpg などです。

エラーが発生した場合 (使用しているドライバがそのファイル形式をサポートしていないなど) は PEAR_Error オブジェクトを返します。

画像を保存せず直接ブラウザに送出するには display() を使用します。

その他のメソッド

表 49-3ドライバごとの各種メソッドの対応状況

メソッドGDImagick2Imagick3ImlibIMNetPBM
_resize()yesyesyesyesyesyes
save()yesyesyesyesyesyes
display()yesyesyesyesyesyes
free()yesyesyesyesyesyes
addText()yesyesyesyesyesyes
addDropShadow()------
addBorder()yes-----
crop()yesyesyesyesyesyes
canvasResize()------
fitOnCanvas()------
flip()yesyesyesyesyesyes
gamma()yesyesyes-yesyes
greyscale()yes-yes-yesyes
mirror()yesyesyesyesyesyes
normalize()------
rotate()yesyesyesyesyesyes