php 将图片截取成3张,【php】php gd库怎么把一个图片裁剪成圆形的

微信的头像现在要加水印到一张图片上 弄成 圆形的 怎么裁剪呢

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

for($y=0;$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;

}

回答

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

谢邀。

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

$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);

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

98336dd35714f7b25a2758aee2c3338c.png

确定要这么做么?

图片不可能是圆形,只能做成中间看到的部分是圆的,其他部分是png透明的.

或者把你的需求再说详细点,一般,在后端加水印,前端用css 处理显示圆形图片不可以么?

谢邀

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

看是否有帮助

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

`

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

for($y=0;$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;

}

`

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值