このBlogで画像表示に対応させようと、PHPのGDライブラリを使用してサムネイルを表示/作成出来るようなスクリプトを色々なサイトを参考に書いてみました。
このサイトでお世話になっている「さくらのレンタルサーバー<a href=”http://support.sakura.ad.jp/manual/rs/tech_server.html”>(仕様参照)</a>」はデフォルトでGDに対応しているようで、何もインストールせずに↓のスクリプトでサムネイルを作成出来ました。
※例外処理が皆無なので、実際の使用は適宜メンテナンスして下さい。
●HTMLでの呼び出し方
<img src="PHPのパス?image=元画像&width=サイズ">
●サムネイル作成PHP
<?php
$file_path = $HTTP_GET_VARS['image'];
// 画像の種類を判別
$type=exif_imagetype($file_path);
switch ($type){
case 1: //IMAGETYPE_GIF:
$image = ImageCreateFromGIF($file_path); //GIFファイルを読み込む
break;
case 2: //IMAGETYPE_JPEG:
$image = ImageCreateFromJPEG($file_path); //JPEGファイルを読み込む
break;
case 3: //IMAGETYPE_PNG:
$image = ImageCreateFromPNG($file_path); //PNGファイルを読み込む
break;
}
// 画像のサイズ
$width = ImageSX($image); //元画像の横幅(px)
$height = ImageSY($image); //元画像の縦幅(px)
$new_width = $HTTP_GET_VARS['width'];
$rate = min($new_width / $width, $new_width / $height); //縮小率(縦・横が$new_widthに収まるように)
$new_height = $rate * $height;
$new_width = $rate * $width;
// リサイズ後の画像を作成
$new_image = ImageCreateTrueColor($new_width, $new_height);
ImageCopyResized($new_image,$image,0,0,0,0,$new_width,$new_height,$width,$height);
//ImageCopyResampled($new_image,$image,0,0,0,0,$new_width,$new_height,$width,$height);
// 作成した画像を出力
switch ($type){
case 1: //IMAGETYPE_GIF:
header('Content-type: image/gif');
ImageGIF($new_image);
break;
case 2: //IMAGETYPE_JPEG:
header('Content-type: image/jpeg');
ImageJPEG($new_image);
break;
case 3: //IMAGETYPE_PNG:
header('Content-type: image/png');
ImagePNG($new_image);
break;
}
//後始末・・・メモリを解放する
imagedestroy ($new_image);
imagedestroy ($image);
?>
30・31行目:リサンプリングしてサムネイルを作るには30行目をコメントアウトして、31行目のImageCopyResampledを使用して下さい。
(ImageCopyResampledの方がリソースを食うみたい)
36~45行目:ファイルに出力する場合は、header出力をやめる&ImageXXXの引数に出力先のパスを追加で出来ます。
なんだか、Blogに書きたいことよりも、Blogを作るというかカスタマイズする方向ばかりに走っていますねぇ。
ちなみに、筆者はPHP歴は2週間の若輩者で、仕事は非IT系なので、間違えなんかがあるかも知れません。
参考
・<a href=”http://goodjob.boy.jp/chirashinoura/id/79.html”>【PHP】GDライブラリを使って画像のサムネイルを作成する。</a>
・<a href=”http://php.net/manual/ja/function.exif-imagetype.php”>PHP Manual -> exif_imagetype</a>