当前位置:首页 > 技术文档 > 正文内容

php给图片添加圆角并且保持透明,可做圆形头像

admin8年前 (2018-02-06)技术文档1974

想把图片处理成圆形透明的图片请参考文章

php把图片处理成圆形


给图片添加圆角,

用到的主要的(判断一个点是否在圆内)的公式在上面所说的生成圆形图片文章中。

然后扫描原图把每个个适合的像素画到一个透明的图片上去


根据想添加的圆角大小来生成一定的圆角

如图

blob.png

首先根据圆角确定图片四角的正方形形状,扫描的时候只要是不在这些范围内的像素才画上去

/**
  *  blog:http://www.zhaokeli.com
 * 处理成圆图片,如果图片不是正方形就取最小边的圆半径,从左边开始剪切成圆形
 * @param  string $imgpath [description]
 * @return [type]          [description]
 */
function yuan_img($imgpath = './tx.jpg') {
	$ext     = pathinfo($imgpath);
	$src_img = null;
	switch ($ext['extension']) {
	case 'jpg':
		$src_img = imagecreatefromjpeg($imgpath);
		break;
	case 'png':
		$src_img = imagecreatefrompng($imgpath);
		break;
	}
	$wh  = getimagesize($imgpath);
	$w   = $wh[0];
	$h   = $wh[1];
	$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;
}
header("content-type:image/png");
$imgg = yuan_img();
imagepng($imgg);
imagedestroy($imgg);

原理如图


blob.png

用以下公式计算

(x-a)*(x-a)+(y-b)*(y-b)<r2

公式成立说明当前x,y点在圆内

x,y为当前的坐标

a,b为圆的圆心位置

r为半径

先创建一张透明的图片,

然后一行一行的扫描原图如图像素点在圆内就画出这个像素不在的就保持透明色就可以


分享到:

扫描二维码推送至手机访问。

版权声明:本文由云河空间发布,如需转载请注明出处。

本文链接:http://yuyunhe.cn/index.php/post/252.html

分享给朋友:

“php给图片添加圆角并且保持透明,可做圆形头像” 的相关文章

PHP分页函数仿Google分页

/**  * 分页函数  * @param int $total    总页数  * @param int $pagesize 每页几条 &n...

git的几个小技巧

git的几个小技巧

分享git的几个小技巧,后面会根据使用补充。目前包括git撤销本地修改、git回退到前n个版本、git多用户提交冲突解决、git 命令简化。欢迎大家补充^_*1、git撤销本地修改 Java git reset --hard origin/ma...

wamp下虚拟主机的配置

1  编辑httpd.conf,查找Include conf/extra/httpd-vhosts.conf,把前面注释符号“#”删掉。 2  编辑httpd-vhosts.conf,我把WAMPServer安装在D:/wamp,所以我这里的路径是D:\wamp\Apache2\...

 PHP二维数组的矩阵转置

PHP二维数组的矩阵转置

<?php    $arr1 = array(               array(1,2,3),            &nbs...

php 操作数组 (合并,拆分,追加,查找,删除等)

php 操作数组 (合并,拆分,追加,查找,删除等)

1. 合并数组array_merge()函数将数组合并到一起,返回一个联合的数组。所得到的数组以第一个输入数组参数开始,按后面数组参数出现的顺序依次迫加。其形式为:Php代码  array array_merge (array array1 ...

PHP_判断变量是否为数字

PHP_判断变量是否为数字,方法一:php中利用正则表达式验证字符串是否为数字一件非常容易的事情,最主要的是如何写好正则表达式以及掌握正则表达式的写法,在此利用正则表达式的方式...方法一:php中利用正则表达式验证字符串是否为数字一件非常容易的事情,最主要的是如何写好正则表达式以及掌握正则表达式的...

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。