基于 GD 库生成圆形头像
laravel 友好的图片处理库 Intervention Image 可以绘制圆形(circle()), 但是好像并不能将即存的图片裁剪成圆形, 这里提供一个基于 GD 库的正圆形裁剪
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
/** * 获取圆 * * @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
中的圆形部分全部填充到底图当中, 剩余部分略过.
同理可以生成椭圆形, 圆角图片等比较有意思的图片.