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); }