function test($url, $path = './',$w = 162,$h = 162)
{
$original_path = $url;
$dest_path = $path;
$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);
}
方法二:
/**
* 生成圆
* @param string $imgpath
* @return resource
*/
public function yuan($imgpath = '')
{
if (!$imgpath) {
$imgpath = "logo.jpg";
}
if (file_get_contents($imgpath)) {
$src_img = imagecreatefromstring(file_get_contents($imgpath));
} else {
$src_img = imagecreatefromstring(file_get_contents("logo.jpg"));
}
$w = imagesx($src_img);
$h = imagesy($src_img);
$w = min($w, $h);
$h = $w;
$img = imagecreatetruecolor($w, $h);
//这一句一定要有
imagesavealpha($img, true);
//拾取一个完全透明的颜色,最后一个参数127为全透明
$bg = imagecolorallocatealpha($img, 255, 255, 255, 127);
imagefill($img, 0, 0, $bg);
$r = $w / 2; //圆半径
$y_x = $r; //圆心X坐标
$y_y = $r; //圆心Y坐标
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);
}
}
}
return $img;
}
注意:因为裁剪后有部分为透明,所以一般都是.png格式才支持(有透明通道格式的图片)!