function resize($imgPath, $savePath = null, $newWidth = null, $newHeight = null, $trimming = false)
{
// 元画像のサイズを取得
$imginfo = getimagesize($imgPath);
$srcWidth = $imginfo[0];
$srcHeight = $imginfo[1];
$image_type = $imginfo[2];
/* 処理できる画像は、縦×横のピクセル数が1,900,000程度迄の場合があった。*/
/* アイデュのサーバーでは問題なかった */
/*if($srcWidth > 1600 || $srcHeight > 1200){
unlink($imgPath);
return false;
}*/
// 元となる画像のオブジェクトを生成
switch ($image_type) {
case IMAGETYPE_GIF:
$srcImage = imagecreatefromgif($imgPath);
break;
case IMAGETYPE_JPEG:
$srcImage = imagecreatefromjpeg($imgPath);
break;
case IMAGETYPE_PNG:
$srcImage = imagecreatefrompng($imgPath);
break;
default:
return false;
}
if (!$srcImage) {
return false;
}
// 新しい画像のサイズを取得
if (!$newWidth) {
if ($srcHeight < $newHeight) {
$rate = 1;
} else {
$rate = $srcHeight / $newHeight;
}
} elseif (!$newHeight) {
if ($srcWidth < $newWidth) {
$rate = 1;
} else {
$rate = $srcWidth / $newWidth;
}
} else {
$w = $srcWidth / $newWidth;
$h = $srcHeight / $newHeight;
if ($w < 1 && $h < 1) {
$rate = 1;
} elseif ($w > $h) {
$rate = $w;
} else {
$rate = $h;
}
}
if (!$trimming) {
$newWidth = $srcWidth / $rate;
$newHeight = $srcHeight / $rate;
}
// 新しい画像のベースを作成
switch ($image_type) {
case IMAGETYPE_GIF:
$newImage = imagecreatetruecolor($newWidth, $newHeight);
$alpha = imagecolorallocatealpha($newImage, 255, 255, 255, 0);
imagefill($newImage, 0, 0, $alpha);
imagecolortransparent($newImage, $alpha);
break;
case IMAGETYPE_PNG:
$newImage = imagecreatetruecolor($newWidth, $newHeight);
imagealphablending($newImage, false);
imagesavealpha($newImage, true);
break;
default:
$newImage = imagecreatetruecolor($newWidth, $newHeight);
$color = imagecolorallocatealpha($newImage, 255, 255, 255, 0);
imagealphablending($newImage, true);
imagesavealpha($newImage, true);
imagefill($newImage, 0, 0, $color);
break;
}
// 画像をコピーし、リサイズする
$newImage = $this->_copyAndResize($srcImage, $newImage, $srcWidth, $srcHeight, $newWidth, $newHeight, $trimming);
imagedestroy($srcImage);
if ($savePath && file_exists($savePath)) {
@unlink($savePath);
}
switch ($image_type) {
case IMAGETYPE_GIF:
if ($savePath) {
imagegif($newImage, $savePath);
} else {
imagegif($newImage);
}
break;
case IMAGETYPE_JPEG:
imagejpeg($newImage, $savePath, 100);
break;
case IMAGETYPE_PNG:
if ($savePath) {
imagepng($newImage, $savePath);
} else {
imagepng($newImage);
}
break;
default:
return false;
}
imagedestroy($newImage);
if ($savePath) {
chmod($savePath, 0666);
}
return true;
}