1.   本网站所有源码包解压密码:www.youhutong.com
会员登录  帮助问答

PHP利用gd库函数,把图片处理编辑成圆形图片方法案例

小川 PHP

通常我们做开发的时候经常需要把图片处理成或显示成圆图。

今天我们来说说利用PHP怎么把图片处理编辑成圆图。


我们先来看一下效果图:

原图:

01.jpg

原图最大取圆后:

a10.png

缩放指定直径为300后:

a11.png


核心处理方法代码如下:

/**
 * 将图片切成圆图片(实际是一个正方形的透明图片)
 * @author www.youhutong.com  xiaochuan 28126649@qq.com
 * @param object $imgobj 图片对像
 * @param int $diameter 指定圆直径(不传就按可取最大圆取)
 * @return object
 */
function yuanjiao($imgobj, $diameter=false){
	if($diameter!==false){
		$xc_img = imagecreatetruecolor($diameter, $diameter);
		$xc_w = imagesx($imgobj);
		$xc_h = imagesy($imgobj);
		imagecopyresampled($xc_img, $imgobj,0, 0, 0, 0, $diameter, $diameter, $xc_w, $xc_h);
		$imgobj = $xc_img;
	}
	#  获取原图宽高
	$w   = imagesx($imgobj);
	$h   = imagesy($imgobj);
	#  计算出圆最大直径(得出需要创建的正方形大小)
	$w   = min($w, $h);
	$h   = $w;
	$img = imagecreatetruecolor($w, $h);
	#  设置保存PNG时保留透明通道信息(这一句一定要有,不然后面填充不了透明色)
	imagesavealpha($img, true);
	#  为一个图像分配颜色和透明度,最后一个参数127为全透明
	$bg = imagecolorallocatealpha($img, 255, 255, 255, 127);
	#  填充图像
	imagefill($img, 0, 0, $bg);

	#  算出圆半径,开始一个一个像素复制图片
	$r   = $w / 2;
	for ($x = 0; $x < $w; $x++) {
		for ($y = 0; $y < $h; $y++) {
			$rgbColor = imagecolorat($imgobj, $x, $y);
			if (((($x - $r) * ($x - $r) + ($y - $r) * ($y - $r)) < ($r * $r))) {
				imagesetpixel($img, $x, $y, $rgbColor);
			}
		}
	}
	return $img;
}

全部代码:

<?php
header('Content-Type:text/html; charset=utf-8');
/**
 * 将图片切成圆图片(实际是一个正方形的透明图片)
 * @author www.youhutong.com  xiaochuan 28126649@qq.com
 * @param object $imgobj 图片对像
 * @param int $diameter 指定圆直径(不传就按可取最大圆取)
 * @return object
 */
function yuanjiao($imgobj, $diameter=false){
	if($diameter!==false){
		$xc_img = imagecreatetruecolor($diameter, $diameter);
		$xc_w = imagesx($imgobj);
		$xc_h = imagesy($imgobj);
		imagecopyresampled($xc_img, $imgobj,0, 0, 0, 0, $diameter, $diameter, $xc_w, $xc_h);
		$imgobj = $xc_img;
	}
	#  获取原图宽高
	$w   = imagesx($imgobj);
	$h   = imagesy($imgobj);
	#  计算出圆最大直径(得出需要创建的正方形大小)
	$w   = min($w, $h);
	$h   = $w;
	$img = imagecreatetruecolor($w, $h);
	#  设置保存PNG时保留透明通道信息(这一句一定要有,不然后面填充不了透明色)
	imagesavealpha($img, true);
	#  为一个图像分配颜色和透明度,最后一个参数127为全透明
	$bg = imagecolorallocatealpha($img, 255, 255, 255, 127);
	#  填充图像
	imagefill($img, 0, 0, $bg);

	#  算出圆半径,开始一个一个像素复制图片
	$r   = $w / 2;
	for ($x = 0; $x < $w; $x++) {
		for ($y = 0; $y < $h; $y++) {
			$rgbColor = imagecolorat($imgobj, $x, $y);
			if (((($x - $r) * ($x - $r) + ($y - $r) * ($y - $r)) < ($r * $r))) {
				imagesetpixel($img, $x, $y, $rgbColor);
			}
		}
	}
	return $img;
}


$path = './01.jpg';
$img = imagecreatefromjpeg($path);
#  原图最大取圆
$img = yuanjiao($img);
#  缩放指定直径
$img = yuanjiao($img, 300);

header('Content-Type: image/png');
imagepng($img);
imagedestroy($img);
?>


如果你觉得这篇教程的内容对你有帮助、请支持本站谢谢!  点击进入捐赠通道

转载请注明来源地址:小川编程 » https://www.youhutong.com/index.php/article/index/215.html

( 0 )个小伙伴在吐槽
    登录帐号  如果已经登录请刷新! 发表我的评论
    表情