正方形のサムネイルを作成することって結構よくありますよね。
そんなわけで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するときに、はみ出た部分は表示されないので、それを利用してクロップしてます。