PHPで画像の縮小+キャッシュ

4月 29th, 2008 admin Posted in PHP, 今日のコード |

いつもはphpThumbというのを使っていて、これは十分に強力で便利なんですけど重厚すぎる感じがするのでライトな感じのものをいろいろ組み合わせて作ってみました。

やりたいこと

  • 縮小画像をPHPで自動生成したい
  • 毎回自動生成するのは嫌だからキャッシュしたい

手順

便利なライブラリを入手

Gen-X-Design | Ian Selby » PHP Thumbnailer Class v2.0
これは画像縮小用のライブラリ。ファイルを1つインクルードするだけで使える。しかもサンプルコードが超簡単。

ファイルの配置+ファイル作成

PHP Thumbnailerをダウンロードしたら下図のように配置します。.htaccessとcacheフォルダも作ります。cacheは書き込み可能にしておいてください。これらはPHP THumbnailerにキャッシュ機能を追加するために使います。
tree2.jpg

使ってみます。

./img/csnagoya.jpgってファイルを400x300に縮小して表示したいと仮定して、こんな感じでHTMLを書きます。(cacheにはこんなファイルはありませんが気にしなくて大丈夫です)

index.html

HTML:
  1. <img src="./img/thumb/cache/400x300_csnagoya.jpg" alt="" />

.htaccess

CODE:
  1. <ifmodule mod_rewrite.c>
  2. RewriteEngine on
  3. RewriteCond %{REQUEST_FILENAME} ^.*$
  4. RewriteCond %{REQUEST_FILENAME} !-f
  5. RewriteRule ^.*/([0-9]+)x([0-9]+)_(.*)(jpg|gif|pnd)$ /img/thumb/show_image.php?width=$1&height=$2&filename=../img/$3$4 [R]
  6. </ifmodule>

.htaccessをこんな感じにします。んで、次が最後です

show_image.php

PHP:
  1. $filename = 'cache/'.$_GET['width']."x".$_GET['height']."_".basename($_GET['filename']);
  2.  
  3. include_once('thumbnail.inc.php');
  4. $thumb = new Thumbnail($_GET['filename']);
  5. $thumb->resize($_GET['width'],$_GET['height']);
  6. $thumb->save($filename,100);
  7. $thumb->show();
  8. $thumb->destruct();

以上で終わりです。これで一回目のアクセスのときにcache以下に400x300_csnagoya.jpgというファイルが作られて、二回目以降のアクセスにはキャッシュを読みに行くという構成になりました。phpThumbではキャッシュを読むときもphpを読み込む必要があったりしますが、この方法ならphpを読み込まずしてキャッシュを表示できるので高速です。

注意

  • ファイル数が多いときには注意(cache内をディレクトリで分けたり)
  • cacheが勝手に消えない

参考サイト

画像もDBに格納して管理する ―扱いがめんどうなLOB(ラージオブジェクト)は使わない方法

2 Responses to “PHPで画像の縮小+キャッシュ”

  1. [...] というシンプルさなのでとても重宝しています。 使い方とか、キャッシュをする方法は以前書いたのでこちらをご覧下さい。 [...]

  2. 参考にさせていただきました!
    mod_rewriteで、phpに投げる処理はとても素晴らしいです。

    ttp://phpthumb.gxdlabs.com/ にサイトが変更され、
    また、スクリプトも進化してます
    $thumb = new Thumbnail($_GET['filename']); が
    $thumb = PhpThumbFactory::create($_GET['filename']); とか
    ...

    後、.htaccess の pnd は、png です(ちょっとハマった・・汗

Leave a Reply