思路是创建一个和原图宽和高一样的画布(背景透明),然后获取原图片里面的一个圆形,最后再将圆形copy到另一个画布里面
public function yuan_img($imgUrl) {
ini_set ( 'default_socket_timeout', 1 );
$wh = getimagesize ( $imgUrl );
$w = $wh [0];
$h = $wh [1];
$src_img = imagecreatefromstring ( file_get_contents ( $imgUrl ) );
$img = imagecreatetruecolor ( $w, $h );
imagesavealpha ( $img, true );
//拾取一个完全透明的颜色,最后一个参数127为全透明
$bg = imagecolorallocatealpha ( $img, 255, 255, 255, 127 );
imagefill ( $img, 0, 0, $bg );
$w2 = min ( $w, $h );
$h2 = $w;
$r = $w2 / 2; //圆半径
if ($w < $h) { //宽大于高
$y_x = $r; //圆心X坐标
$y_y = $h / 2; //圆心Y坐标
} else { //宽小于高
$y_x = $w / 2; //圆心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 - $y_x) * ($x - $y_x) + ($y - $y_y) * ($y - $y_y)) < ($r * $r))) {
imagesetpixel ( $img, $x, $y, $rgbColor ); //在指定的坐标绘制像素
}
}
}
//1.创建画布
$im = imagecreatetruecolor ( $w2, $h2 );
//2.上色
$color = imagecolorallocate ( $im, 255, 255, 255 );
//3.设置透明
imagecolortransparent ( $im, $color );
imagefill ( $im, 0, 0, $color );
if ($w < $h) { //宽大于高
imagecopy ( $im, $img, 0, 0, 0, ($h / 2) - $r, $w2, $h2 );
} else { //宽小于高
imagecopy ( $im, $img, 0, 0, ($w / 2) - $r, 0, $w2, $h2 );
}
//浏览器输出圆形图
header ( "content-type:image/png" );
imagepng ( $im);
}
版权声明:本文为wyhhxd原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。