php gd库怎么把一个图片裁剪成圆形的

发布于 2022-09-04 04:07:06 字数 1819 浏览 12 评论 0

微信的头像现在要加水印到一张图片上 弄成 圆形的 怎么裁剪呢
Imagick提供的有 gd库 怎么做呢

因为要在微信中生成这个图片发送给用户 所以必须是生成这样的图片的 css的border-radius是只能显示网页中 怎么生成一个图片呢

已找到方法

function resize_img($url,$path='./'){
    $imgname = $path.uniqid().'.jpg';
    $file = $url;
    list($width, $height) = getimagesize($file); //获取原图尺寸
    $percent = (110/$width);
    //缩放尺寸
    $newwidth = $width * $percent;
    $newheight = $height * $percent;
    $src_im = imagecreatefromjpeg($file);
    $dst_im = imagecreatetruecolor($newwidth, $newheight);
    imagecopyresized($dst_im, $src_im, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);
    imagejpeg($dst_im, $imgname); //输出压缩后的图片
    imagedestroy($dst_im);
    imagedestroy($src_im);
    return $imgname;
}

function test($url,$path='./'){  
        $w = 110;  $h=110; // original size  
        $original_path= $url;  
        $dest_path = $path.uniqid().'.png';  
        $src = imagecreatefromstring(file_get_contents($original_path));  
        $newpic = imagecreatetruecolor($w,$h);  
        imagealphablending($newpic,false);  
        $transparent = imagecolorallocatealpha($newpic, 0, 0, 0, 127);  
        $r=$w/2;  
        for($x=0;$x<$w;$x++)  
            for($y=0;$y<$h;$y++){  
                $c = imagecolorat($src,$x,$y);  
                $_x = $x - $w/2;  
                $_y = $y - $h/2;  
                if((($_x*$_x) + ($_y*$_y)) < ($r*$r)){  
                    imagesetpixel($newpic,$x,$y,$c);  
                }else{  
                    imagesetpixel($newpic,$x,$y,$transparent);  
                }  
            }  
        imagesavealpha($newpic, true);  
        imagepng($newpic, $dest_path);  
        imagedestroy($newpic);  
        imagedestroy($src);  
       // unlink($url);  
        return $dest_path;  
    }  

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(6

稀香 2022-09-11 04:07:06

为啥非要php处理呢,border-radius不可以解决需求吗?

愛上了 2022-09-11 04:07:06

谢邀。

没有测试微信头像,直接获取的本地的一张头像,然后裁剪圆形头像。

$avatar = __DIR__ . DIRECTORY_SEPARATOR . 'avatar.jpg';
$circleAvatar = __DIR__ . DIRECTORY_SEPARATOR . 'avatar.png';
$r = 50;

function getCircleAvatar($avatar, $circleAvatar, $r) {
    /**
     * @des     画一个正方形
     * @size    两个半径
     */
    $size = 2 * $r;
    $circle = new Imagick();
    $circle->newImage($size, $size, 'none');
    $circle->setimageformat('png');
    $circle->setimagematte(true);

    /**
     * @des     在矩形上画一个白色圆
     */
    $draw = new ImagickDraw();
    $draw->setfillcolor('#fff');
    $draw->circle($r, $r, $r, $size);
    $circle->drawimage($draw);

    /**
     * @des     裁剪头像成圆形
     */
    $imagick = new Imagick();
    $imagick->readImage($avatar);
    $imagick->setImageFormat('png');
    $imagick->setimagematte(true);
    $imagick->cropimage($size, $size, 30, 0); // 修改裁剪属性
    $imagick->compositeimage($circle, Imagick::COMPOSITE_COPYOPACITY , 0, 0);
    $imagick->writeImage($circleAvatar);
    $imagick->destroy();
}

getCircleAvatar($avatar, $circleAvatar, $r);

参照自己实际的情况修改一下。

陈年往事 2022-09-11 04:07:06

确定要这么做么?
图片不可能是圆形,只能做成中间看到的部分是圆的,其他部分是png透明的.
或者把你的需求再说详细点,一般,在后端加水印,前端用css 处理显示圆形图片不可以么?

蘑菇王子 2022-09-11 04:07:06

谢邀

http://blog.csdn.net/sugang_ximi/article/details/30762421

看是否有帮助

坠似风落 2022-09-11 04:07:06

这个不应该是后端处理的范围,让前端去显示吧。

战皆罪 2022-09-11 04:07:06

`

function test($url,$path='./'){  
    $w = 110;  $h=110; // original size  
    $original_path= $url;  
    $dest_path = $path.uniqid().'.png';  
    $src = imagecreatefromstring(file_get_contents($original_path));  
    $newpic = imagecreatetruecolor($w,$h);  
    imagealphablending($newpic,false);  
    $transparent = imagecolorallocatealpha($newpic, 0, 0, 0, 127);  
    $r=$w/2;  
    for($x=0;$x<$w;$x++)  
        for($y=0;$y<$h;$y++){  
            $c = imagecolorat($src,$x,$y);  
            $_x = $x - $w/2;  
            $_y = $y - $h/2;  
            if((($_x*$_x) + ($_y*$_y)) < ($r*$r)){  
                imagesetpixel($newpic,$x,$y,$c);  
            }else{  
                imagesetpixel($newpic,$x,$y,$transparent);  
            }  
        }  
    imagesavealpha($newpic, true);  
    imagepng($newpic, $dest_path);  
    imagedestroy($newpic);  
    imagedestroy($src);  
   // unlink($url);  
    return $dest_path;  
}

`
用你的代码生成速度好慢 怎么回事?

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文