phpで画像のサムネイル出力を簡単に!class.image.phpを使ってみた
サムネイル画像を大量に作る必要があって、それぞれを縮小して保存・・・を繰り返すのがしんどかったのでなんかもうそいうのないかなーと思ってたらphpspotさんで便利なのが紹介されていたので使ってみました。
簡単なコードで画像の縮小や切り抜きができちゃうすぐれものです。今回は縮小機能のみ使用。
目的
今回使うに当たりましては下記の項目が目標でした。
- 画像を縮小して表示すること
- いちいち縮小表示させるとちょっとしんどそうなので一度作ったサムネイル画像は保存して次からはそれを表示すること
- URLで縮小サイズを指定できること
イメージ的には楽天市場の画像サーバーみたいな感じ(例:http://thumbnail.image.rakuten.co.jp/@0_mall/hogehoge/cabinet/photo.jpg?_ex=600×600みたいなの)で柔軟に使えたらいいなーどうかなーとかそんな感じです。
てことで、いってみよー!
class.image.phpをダウンロード
こちらからダウンロードできます ⇒ Icebeat | class.image
作ってみた
てことで上のようなファイル構成です。
mainに元の画像を入れて、thumbには作られたサムネイル画像が入る。
none.gifは元の画像がないよなんも表示するものないよーという場合に表示する画像。
index.phpは
require_once("./class.image.php"); //フォルダ設定 $dir1 = "main/"; $dir2 = "thumb/"; $id = preg_replace("/\W/", "", htmlspecialchars($_GET['i'], ENT_QUOTES)); $resize = preg_replace("/[^0-9]/", "", htmlspecialchars($_GET['s'], ENT_QUOTES)); //指定がない場合は300pxに if(!is_numeric($resize)) $resize = 300; if(file_exists($dir2.$id."-".$resize.".jpg")){ header("Content-Type: image/jpeg"); readfile($dir2.$id."-".$resize.".jpg"); } else { if(file_exists($dir1.$id.".jpg")){ $thumb = new Image($dir1.$id.".jpg"); $info = getimagesize($dir1.$id.".jpg"); $thumb->quality(85); if($info[0]>$info[1]) {//横長の場合 $thumb->width($resize); } else {//縦長の場合 $thumb->height($resize); } $thumb->dir(dirname(__FILE__)."/".$dir2); $thumb->name($id."-".$resize); $thumb->save(); header("Content-Type: image/jpeg"); readfile($dir2.$id."-".$resize.".jpg"); } else { header("Content-Type: image/gif"); readfile("./none.gif"); } }
という内容。jpgしか表示ない予定だったのでjpgのみ対応。
$thumb->nameとかって書き方、どういうのなんだろうっていつも不思議に思ってます。誰か教えて( ;∀;)
$thumb->dirで保存するフォルダを指定するみたい。マニュアルを探してみたけどよくわかんなくってこれであってるのかなー動いてるからいいと思うけどなー・・・。
画像は
<img src="https://hogehoge.com/image/?i=001&s=600" />
という感じで呼び出せば表示できます。
“i=XXX”には拡張子を抜いた画像名を入れます。
“s=XXX”で指定した数字に画像をリサイズし、thumbフォルダ内へ“元の画像名-リサイズ数値.jpg”で保存されます。(上の例だとthumb/001-600.jpg)
上のindex.phpだとどんなサイズでも自由に表示・保存できてしまうので、リサイズ後の画像を保存する場合はリサイズ数値の許可リストとか作ったほうがよさそう。
リサイズした画像を保存したくない場合、$thumb->save();を$thumb->show();にすると保存せずにそのまま表示できます。(フォルダとか諸々の設定は不要となります)
リンク:
PHPでの画像のリサイズ、切り抜きが自由自在「class.image.php」
Icebeat | class.image