通常我们做开发的时候经常需要把图片处理成或显示成圆图。
今天我们来说说利用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、如侵犯到任何版权问题,请立即告知本站(立即在线告知),本站将及时删除并致以最深的歉意
