```
/**
* 处理圆角图片
* @param srting $imgpath 源图片的路径
* @return [type] [description]
*/
public function roundedCorners($imgpath){
list($width,$height,$type) = getimagesize($imgpath);//获取上传图片大小
if ($width != $height) {//如果上传图片不是正方形,取最小宽度作为最终生成图的大小
if ($width > $height) {
$imsize = $height;
} else {
$imsize = $width;
}
}else{
$imsize = $width;
}
$im = imagecreatetruecolor($imsize, $imsize);//这里创建第一个图像
$white = imagecolorallocate($im, 255, 255, 255);// 随便取两个颜色,这里取黑色和白色
$black = imagecolorallocate($im, 0, 0, 0);
imagefill($im, 0, 0, $white);//将图片填充为白色
imagefilledellipse($im, $imsize/2, $imsize/2, $imsize, $imsize, $black);//然后再图片中间画一个黑色的圆
imagecolortransparent($im, $black);//将黑色设为透明的,则现在四个角是白色的,然后中间是透明的
switch ($type) {
case '2':
$img = imagecreatefromjpeg($imgpath);//这里创建的是第二个图像
break;
default:
$img = imagecreatefrompng($imgpath);//这里创建的是第二个图像
break;
}
$final = imagecreatetruecolor($imsize, $imsize);//再创建一个图像,第三个图像
imagecopyresampled($final, $img, 0, 0, ($width-$imsize)/2, ($height-$imsize)/2, $imsize, $imsize, $imsize, $imsize);//先将第二个图像(图片)压在空白的图像上,根据最小宽度,居中裁剪,成为第四个图像
imagecopymerge($final, $im, 0, 0, 0, 0, $imsize, $imsize, 100);//再将第一个图像压在第四个图像上,由于中间是透明的,所以现在图像上中间是图片,四个角都是白色的,第五个图
imagecolortransparent($im, $white);//然后将白色设置为透明的,现在这个图四个角是透明的,然后中间是黑色的
imagecopymerge($im, $final, 0, 0, 0, 0, $imsize, $imsize, 100);//将第五个图压在最后的图像上,就可以得到最后的圆形的图了
imagepng($im, './poster/u2222.png');
//imagepng($im, '图片路径');
//dump($im);//返回图片
return './poster/u2222.png';
}
```
[链接](https://www.jianshu.com/p/6eb141eed335)