业务需要把创建海报上的用户头像由方形转为圆形,前端的样式设置不能用。
故采用GD的函数来对方图进行裁剪处理为圆图。
目录
裁剪函数
本地图片
远程图片
效果
参考文章
总结
裁剪函数
从网上找的一个裁剪图片的函数。
代码如下:
/*
* 将图片切成圆角
*/
function drawCircle($imgPath){$ext = pathinfo($imgPath);$src_img = null;switch ($ext['extension']) {case 'jpg':$src_img = imagecreatefromjpeg($imgPath);break;case 'png':$src_img = imagecreatefrompng($imgPath);break;}$wh = getimagesize($imgPath);$w = $wh[0];$h = $wh[1];$w = min($w, $h);$h = $w;$img = imagecreatetruecolor($w, $h);// 设置标记以在保存 PNG 图像时保存完整的 alpha 通道信息imagesavealpha($img, true);// 拾取一个完全透明的颜色,最后一个参数127为全透明$bg = imagecolorallocatealpha($img, 255, 255, 255, 127);imagefill($img, 0, 0, $bg);$r = $w / 2; //圆半径for ($x = 0; $x < $w; $x++) {for ($y = 0; $y < $h; $y++) {$rgbColor = imagecolorat($src_img, $x, $y);if (((($x - $r) * ($x - $r) + ($y - $r) * ($y - $r)) < ($r * $r))) {imagesetpixel($img, $x, $y, $rgbColor);}}}// 资源内容 resource(5) of type (gd)return $img;
}
本地图片
使用本地图片作为裁剪的源文件,需要图片文件的绝对路径作为参数。
代码如下:
// 绝对路径
$info = drawCircle(dirname(__FILE__).'/img/2.jpg');
//var_dump($info); // resource(5) of type (gd)// 直接图片显示
header('Content-Type: image/png');
imagepng($info);
远程图片
如果使用的是远程的网络图片,比如https://xxx.img文件时。
直接使用会无法读取到图片内容。
就需要变动一下处理:先下载图片到本地,然后图片绝对路径。
代码如下:
// 如果是网络图片 需要下载本地后 换成绝对路径
$fileName = './1.jpg';
file_put_contents($fileName, file_get_contents('https://t9.baidu.com/it/u=2906392343,593562570&fm=217&app=126&size=f242,150&n=0&f=JPEG&fmt=auto?s=1338748239B30A887D51FE0E030040E5&sec=1732986000&t=4418c79f8c027c772f1e5c55284d524e'));
$info = drawCircle(dirname(__FILE__) . ltrim($fileName, '.'));
//var_dump($info); // resource(5) of type (gd)// 直接图片显示
header('Content-Type: image/png');
imagepng($info);
效果
参考文章
php 利用GD库将正方形图片变成圆形_php gd把图片变成圆形-CSDN博客
总结
使用PHP GD库函数对方图进行裁剪处理为圆图