先日画像をアップロード&リサイズするビヘイビアを紹介しましたが、今回は画像をリサイズするヘルパーを2つ紹介します。

両方のヘルパーともキャッシュファイルを生成して表示しています。キャッシュがない場合はリサイズしてキャッシュファイルを生成、キャッシュファイルよりも元画像の方が新しければ画像が更新されたのでキャッシュを生成しなおしてくれます。ただ、両方のヘルパーとも画像ファイルのみでキャッシュファイルを生成するため、階層構造の画像ファイルを使用する場合はカスタマイズが必要です。

ImageBehavior でアップロード時に必要な画像のサイズにリサイズするのもいいですが、デザインによっては画像の大きさが各種あったり、サイトのリニューアルで画像サイズが変わったりすることもあるので、表示時にリサイズする利点はあると思います。

Image Resize Helper

Image Resize Helper (Articles) | The Bakery, Everything CakePHP
GD を使用してリサイズするヘルパーです。使いやすいのですが、CakePHP1.1 用に書かれたコードなので、CakePHP1.2 では若干エラーが出ます。最後の return 文を下記のようにすれば CakePHP1.2 でもエラーが出なくなります。

return $this->Html->image($relfile, $htmlAttributes);

view で以下のようにすればリサイズされた画像を表示できます。

echo $image->resize('hoge.png', 60, 60, true);

画像ファイルは webroot/img 以下のファイルを相対パスで指定します。先日紹介した ImageBehavior で取得出来るパスもそのまま使えます。

ただしキャッシュがファイル名のみで行われるので以下のようにカスタマイズしました。

$pathinfo = pathinfo($path);
$cache_name = md5($path).".".$pathinfo['extension'];
$relfile = $this->webroot.$this->themeWeb.IMAGES_URL.$this->cacheDir.'/'.$width.'x'.$height.'_'.$cache_name;
$cachefile = $fullpath.$this->cacheDir.DS.$width.'x'.$height.'_'.$cache_name;

最終的に使用しているソースは下記にアップしてあります。
ImageHelper – GitHub

Image Magick Resize Helper

Image Magick Resize Helper (Articles) | The Bakery, Everything CakePHP
Image Magick を使用してリサイズするヘルパーです。

view で以下のようにすればリサイズして表示できます。

echo $magickConvert->resize(IMAGES_URL."hoge.png", 60, 60, true);

こちらもキャッシュはファイル名で行われるので階層構造の画像を使用する場合はカスタマイズが必要です。

関連する投稿