将大图,设定一个原点,宽高裁剪,粘贴到小图上
从小图的原点,粘贴一定的宽高.大图会自适应放入小图的矩形中
imagecopyresampled — 重采样拷贝部分图像并调整大小
/**
*
*生成缩略图(等比例缩放,两边留白)
*@param string $filename 文件路径(./dd/fgg/dfd.jpg)
*@param int $sw 缩略图的宽
*@param int $sh 缩略图的高
*@return string $path 返回图片路径
*/
function makeThumb($filename,$sw=200,$sh=200){
$path= dirname($filename).'/'.time().randStr().'.png';
$opic=ROOT.$filename;//大图的绝对路径
$opath= ROOT.$path;//小图的绝对路径
//获取原始大图片的宽高和类型
if(!list($bw,$bh,$type)=getimagesize($opic)){
return false;
}
//设置允许上传的图片类型
$map= array(
1=>'imagecreatefromgif',
2=>'imagecreatefromjpeg',
3=>'imagecreatefrompng',
15=>'imagecreatefromwbmp'
);
//如果上面获取的图片类型在$map里面没有设置,则直接返回
if(!isset($map[$type])){
return false;
}
//创建一个大图图像
$big=$map[$type]($opic);
//创建小图画布,设置颜色为白色
$small=imagecreatetruecolor($sw,$sh);
$white=imagecolorallocate($small,255,255,255);
//将白的付给画布
imagefill($small,0,0,$white);
//计算缩略比:缩略图/原始图,取最小值
$rate=min($sw/$bw,$sh/$bh);
//计算最终缩略图的宽和高
$rw = $bw*$rate;
$rh = $bh*$rate;
//将小图放到画布上
imagecopyresampled( $small,$big,($sw-$rw)/2,($sh-$rh)/2,0,0,$rw,$rh,$bw,$bh);
//保存缩略图
imagepng($small,$opath);
//销毁创建的画布和原图
imagedestroy($big);
imagedestroy($small);
return $path;
}