基于 GD 库生成圆形头像
基于 GD 库生成圆形头像
laravel 友好的图片处理库 Intervention Image 可以绘制圆形(circle()), 但是好像并不能将即存的图片裁剪成圆形, 这里提供一个基于 GD 库的正圆形裁剪
/**
* 获取圆
*
* @param $imgPath 图片网络路径, 本地路径
* @return resource
* @author 19/1/29 CLZ.
*/
private function _circleImg($imgPath)
{
$src_img = imagecreatefromjpeg($imgPath);
list($w, $h) = getimagesize($imgPath);
$w = $h = min($w, $h);
$img = imagecreatetruecolor($w, $h);
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);
}
}
imagedestroy($src_img);
return $img;
}
原理很简单, 创建一个 png 的透明底图 $bg
, 然后将原图片 $src_img
中的圆形部分全部填充到底图当中, 剩余部分略过.
同理可以生成椭圆形, 圆角图片等比较有意思的图片.
本作品采用《CC 协议》,转载必须注明作者和本文链接
推荐文章: