【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<$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;
}
回答
为啥非要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);
参照自己实际的情况修改一下。
确定要这么做么?
图片不可能是圆形,只能做成中间看到的部分是圆的,其他部分是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<$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;
}
`
用你的代码生成速度好慢 怎么回事?
以上是 【php】php gd库怎么把一个图片裁剪成圆形的 的全部内容, 来源链接: utcz.com/a/100127.html