正方形のサムネイルの作成

正方形のサムネイルを作成することって結構よくありますよね。

そんなわけでphp-gdでそれをやるスニペットです。jpg専用にしてありますが、応用範囲は広そうです。

[php]
$errArr = array();//エラー用の配列
if($_FILES){
$size = 136;

foreach ($_FILES as $key => $file){

$fileName = basename(date("U")."-".$file[‘name’]);
$fileType = $file[‘type’];
$fileTmpName = $file[‘tmp_name’];
$file_path = ‘./photos/’ .$fileName;

if(preg_match("/jpeg/",$fileType)){
if(move_uploaded_file($fileTmpName, $file_path )){

list($width,$height)=getimagesize($file_path);

if($width != $size or $height != $size){

// 画像を読み込む。
$image = ImageCreateFromJPEG($file_path); //JPEGファイルを読み込む

if($width>$height){
$new_height = $size;
$new_width = $size*$width/$height;

$x = ($new_width-$size)/2;
$y = 0;
}
else{
$new_width = $size;
$new_height = $size*$height/$width;

$x = 0;
$y = ($new_height-$size)/2;

}

//空のイメージを作成
$new_image = ImageCreateTrueColor($size,$size);

//空のイメージにペースト&リサイズ
imagecopyresampled($new_image,$image,0,0,$x,$y,$new_width,$new_height,$width,$height);

//save Image
ImageJPEG($new_image, $file_path, 100);

//メモリの開放
imagedestroy ($image);
imagedestroy ($new_image);
}
}
else{
exit("アップロードに失敗");
}
}else{
$errArr[]="JPEGファイルをアップロードしてください。";
}
}
}

[/php]

imagecopyresampledするときに、はみ出た部分は表示されないので、それを利用してクロップしてます。