主要这两种方法,记录一下:
一、设置透明度
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;
}
二、利用Imagick
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, 0, 0); // 修改裁剪属性
$imagick->compositeimage($circle, Imagick::COMPOSITE_COPYOPACITY , 0, 0);
$imagick->writeImage($circleAvatar);
$imagick->destroy();
}