php等比例缩放图片及剪切图片代码分享
php等比例缩放图片及剪切图片代码分享
/**
*图片缩放函数(可设置高度固定,宽度固定或者最大宽高,支持gif/jpg/png三种类型)
*Author:Specs
*
*@paramstring$source_path源图片
*@paramint$target_width目标宽度
*@paramint$target_height目标高度
*@paramstring$fixed_orig锁定宽高(可选参数width、height或者空值)
*@returnstring
*/
functionmyImageResize($source_path,$target_width=200,$target_height=200,$fixed_orig=''){
$source_info=getimagesize($source_path);
$source_width=$source_info[0];
$source_height=$source_info[1];
$source_mime=$source_info['mime'];
$ratio_orig=$source_width/$source_height;
if($fixed_orig=='width'){
//宽度固定
$target_height=$target_width/$ratio_orig;
}elseif($fixed_orig=='height'){
//高度固定
$target_width=$target_height*$ratio_orig;
}else{
//最大宽或最大高
if($target_width/$target_height>$ratio_orig){
$target_width=$target_height*$ratio_orig;
}else{
$target_height=$target_width/$ratio_orig;
}
}
switch($source_mime){
case'image/gif':
$source_image=imagecreatefromgif($source_path);
break;
case'image/jpeg':
$source_image=imagecreatefromjpeg($source_path);
break;
case'image/png':
$source_image=imagecreatefrompng($source_path);
break;
default:
returnfalse;
break;
}
$target_image=imagecreatetruecolor($target_width,$target_height);
imagecopyresampled($target_image,$source_image,0,0,0,0,$target_width,$target_height,$source_width,$source_height);
//header('Content-type:image/jpeg');
$imgArr=explode('.',$source_path);
$target_path=$imgArr[0].'_new.'.$imgArr[1];
imagejpeg($target_image,$target_path,100);
}
用法:
- myImageResize($filename,200,200);//最大宽高
- myImageResize($filename,200,200,'width');//宽度固定
- myImageResize($filename,200,200,'height');//高度固定
剪切图片为固定大小:
functionimagecropper($source_path,$target_width,$target_height){
$source_info=getimagesize($source_path);
$source_width=$source_info[0];
$source_height=$source_info[1];
$source_mime=$source_info['mime'];
$source_ratio=$source_height/$source_width;
$target_ratio=$target_height/$target_width;
//源图过高
if($source_ratio>$target_ratio){
$cropped_width=$source_width;
$cropped_height=$source_width*$target_ratio;
$source_x=0;
$source_y=($source_height-$cropped_height)/2;
}elseif($source_ratio<$target_ratio){//源图过宽
$cropped_width=$source_height/$target_ratio;
$cropped_height=$source_height;
$source_x=($source_width-$cropped_width)/2;
$source_y=0;
}else{//源图适中
$cropped_width=$source_width;
$cropped_height=$source_height;
$source_x=0;
$source_y=0;
}
switch($source_mime){
case'image/gif':
$source_image=imagecreatefromgif($source_path);
break;
case'image/jpeg':
$source_image=imagecreatefromjpeg($source_path);
break;
case'image/png':
$source_image=imagecreatefrompng($source_path);
break;
default:
returnfalse;
break;
}
$target_image=imagecreatetruecolor($target_width,$target_height);
$cropped_image=imagecreatetruecolor($cropped_width,$cropped_height);
//裁剪
imagecopy($cropped_image,$source_image,0,0,$source_x,$source_y,$cropped_width,$cropped_height);
//缩放
imagecopyresampled($target_image,$cropped_image,0,0,0,0,$target_width,$target_height,$cropped_width,$cropped_height);
$dotpos=strrpos($source_path,'.');
$imgName=substr($source_path,0,$dotpos);
$suffix=substr($source_path,$dotpos);
$imgNew=$imgName.'_small'.$suffix;
imagejpeg($target_image,$imgNew,100);
imagedestroy($source_image);
imagedestroy($target_image);
imagedestroy($cropped_image);
}