基于 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 协议》,转载必须注明作者和本文链接
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
讨论数量: 2

请问Intervention Image这个库能不能生成圆角矩形?

6年前 评论

@Evan 应该没有提供吧, 具体参阅官网, 我没有挨个额, 抱歉了

6年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!