php 将图片裁剪成圆形图片,裁剪图片为圆形

```

/**

* 处理圆角图片

* @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)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值