サムネイル作成などの画像操作にはimagickという拡張モジュールみたいなものを使うと便利です。紛らわしいのですが、ImageMagickは端末操作やPerlなどで使用できますが、phpの場合はimagickというモジュールを別途必要とします。あらかじめimagickとそれに依存するパッケージのインストールをしておく必要があります。
最もシンプルに作成するには、上記のような感じになります。もしアスペクト比を無視してサムネイル作成する場合は、
となります。サイズの引数に0を与え、最後の引数に1を指定するとアスペクト比を保つようになり、サイズの引数を縦横共に指定し最後の引数にfalseを与えるとアスペクト比を無視して指定のサイズに整形されます。
またすばらしことに$image->writeImage('001.jpg');の保存ファイル名の拡張子を.gifやpngにするだけでフォーマット変換してくれる優れものです。$image->writeImage('001.gif');にするだけでよいです。
サムネイルを作成
<?
$image = new Imagick('image.jpg'); //Imagickのインスタンスの作成
$image->resizeImage(100, 0, imagick::FILTER_MITCHELL, 1); //アスペクト比を保ちながら縮小(リサイズ)
$image->writeImage('001.jpg'); //指定のファイル名で保存
$image->destroy(); //メモリから消去
?>
最もシンプルに作成するには、上記のような感じになります。もしアスペクト比を無視してサムネイル作成する場合は、
$image->resizeImage(200, 100, imagick::FILTER_MITCHELL, 1, false);
となります。サイズの引数に0を与え、最後の引数に1を指定するとアスペクト比を保つようになり、サイズの引数を縦横共に指定し最後の引数にfalseを与えるとアスペクト比を無視して指定のサイズに整形されます。
またすばらしことに$image->writeImage('001.jpg');の保存ファイル名の拡張子を.gifやpngにするだけでフォーマット変換してくれる優れものです。$image->writeImage('001.gif');にするだけでよいです。
サムネイルを一つ作成する(関数)
<?
$return = make_thumbnail("image.jpg","100","0","thumbnail.jpg");
function make_thumbnail ($file_name, $x_size, $y_size, $thumnail_file_name) {
#-----------------
# サムネイルの作成
#-----------------
//【呼び出し方】
// make_thmbnail (<元画像のファイル名>, <サムネイルのサイズ(横)>, <サムネイルのサイズ(縦)>, <保存サムネイルのファイル名>);
// 【例】
// $return = make_thmbnail("image.jpg","100","0","thumbnail.jpg");
/*
・指定の画像のサムネイルを作成します。
・引数は4つで<元画像のファイル名>, <サムネイルのサイズ(横)>, <サムネイルのサイズ(縦)>, <保存サムネイルのファイル名>を
・それぞれこの順番で指定します。横サイズと縦サイズのどちらかを0にするとアスペクト比を保ったままリサイズします。
・サイズの両方を0にすることはできません。
・保存するファイル名を元画像と同名にすると上書きされますので、元画像がリサイズされます。
*/
$image = new Imagick($file_name);
$image->resizeImage($x_size, $y_size, imagick::FILTER_MITCHELL, 1);
$image->writeImage($thumnail_file_name);
$image->destroy();
return;
}
?>
複数のサムネイルを一度に作る
<?
#------------------------
# サムネイル作成の設定項目
#------------------------
$image_dir = "test-photo"; //元画像のあるディレクトリ
$thumbnail_dir = "thumbnail_dir"; //サムネイル画像を保存するディレクトリ
$x_size = 130; //サムネイルの横サイズ
$y_size = 0; //サムネイルの縦サイズ
#---------------
# サムネイル作成
#---------------
$open_dir = $image_dir;
if ($dh = opendir($open_dir)) {
while (($file = readdir($dh)) !== false) {
if(!is_dir($file)){
//print "$file\n";
if (file_exists($thumbnail_dir."/thumbnail_".$file)) {//サムネイルが既に存在する時はスキップ
continue;
} else {
$return = make_thumbnail($image_dir.'/'.$file, $x_size, $y_size, $thumbnail_dir."/thumbnail_".$file);
}
}
}
}
closedir($dh);
# 同期をする場合
$open_dir = $thumbnail_dir;
if ($dh = opendir($open_dir)) {
while (($file = readdir($dh)) !== false) {
if(!is_dir($file)){
//print "$file<br />";
list($front, $tail) = explode("_",$file);
if (file_exists($thumbnail_dir.'/'.$file) && !file_exists($image_dir.'/'.$tail)) {
$rm_file = unlink($thumbnail_dir.'/'.$file);
}
}
}
}
closedir($dh);
#------
# 表示
#------
$open_dir = $thumbnail_dir;
if ($dh = opendir($open_dir)) {
while (($file = readdir($dh)) !== false) {
if(!is_dir($file)){
list($front, $tail) = explode("_",$file);
print "<a href='".$image_dir.'/'.$tail."'><img src='".$thumbnail_dir.'/'.$file."' /></a><br />";
}
}
}
closedir($dh);
function make_thumbnail ($file_name, $x_size, $y_size, $thumnail_file_name) {
#-----------------
# サムネイルの作成
#-----------------
$image = new Imagick($file_name);
$image->resizeImage($x_size, $y_size, imagick::FILTER_MITCHELL, 1);
$image->writeImage($thumnail_file_name);
$image->destroy();
return;
}
?>



