/**
* desc 图片缩放
* @param type $file 源文件路径
* @param type $output 缩放文件路径
* @param type $pWidth 缩放宽度
* @return boolean
*/
function smartResizeImage($file, $output, $pWidth)
{
$image = '';
$final_width = 0;
$final_height = 0;
$info = getimagesize($file);
list($width_old, $height_old) = $info;
$pHeight = $height_old;
//图片等比例缩放宽和高设置 ,根据宽度设置等比缩放
$scale_org = $width_old / $height_old;
if ($width_old / $pWidth > $height_old / $pHeight) {
$final_width = $pWidth;
$final_height = $pWidth / $scale_org;
} else {
/* 原始图片比较高,则以高度为准 */
$final_width = $pHeight * $scale_org;
$final_height = $pHeight;
}
switch ($info[2]) {
case IMAGETYPE_GIF:
$image = imagecreatefromgif($file);
break;
case IMAGETYPE_JPEG:
$image = imagecreatefromjpeg($file);
break;
case IMAGETYPE_PNG:
$image = imagecreatefrompng($file);
break;
default:
return false;
}
$image_resized = imagecreatetruecolor($final_width, $final_height);
if (($info[2] == IMAGETYPE_GIF) || ($info[2] == IMAGETYPE_PNG)) {
$trnprt_indx = imagecolortransparent($image);
if ($trnprt_indx >= 0) {
$trnprt_color = imagecolorsforindex($image, $trnprt_indx);
$trnprt_indx = imagecolorallocate($image_resized, $trnprt_color['red'], $trnprt_color['green'], $trnprt_color['blue']);
imagefill($image_resized, 0, 0, $trnprt_indx);
imagecolortransparent($image_resized, $trnprt_indx);
}elseif ($info[2] == IMAGETYPE_PNG) {
imagealphablending($image_resized, false);
$color = imagecolorallocatealpha($image_resized, 0, 0, 0, 127);
imagefill($image_resized, 0, 0, $color);
imagesavealpha($image_resized, true);
}
}
imagecopyresampled($image_resized, $image, 0, 0, 0, 0, $final_width, $final_height, $width_old, $height_old);
imagedestroy($image);
switch ($info[2]) {
case IMAGETYPE_GIF:
imagegif($image_resized, $output);
imagedestroy($image_resized);
break;
case IMAGETYPE_JPEG:
imagejpeg($image_resized, $output);
imagedestroy($image_resized);
break;
case IMAGETYPE_PNG:
imagepng($image_resized, $output);
imagedestroy($image_resized);
break;
default:
return false;
}
return true;
}
缩放图片,支持png透明
于 2022-11-08 16:09:29 首次发布