通常我们做开发的时候经常需要把图片处理成或显示成圆图。
今天我们来说说利用PHP怎么把图片处理编辑成圆图。
我们先来看一下效果图:
原图:
原图最大取圆后:
缩放指定直径为300后:
核心处理方法代码如下:
/** * 将图片切成圆图片(实际是一个正方形的透明图片) * @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
1、本站发布的内容仅限用于学习和研究目的.请勿用于商业或非法用途,下载后请24小时内删除。
2、本站所有内容均不能保证其完整性,不能接受请勿购买或下载,如需完整程序,请去其官方购买正版使用
3、本站联系方式Email:admin@youhutong.com ,收到邮件会第一时间处理。
4、如侵犯到任何版权问题,请立即告知本站(立即在线告知),本站将及时删除并致以最深的歉意