PHP使用函数绘制图片梳理
最近做项目时用到了php给海报图添加用户昵称、头像、二维码等操作,回头温习了下php的绘图相关函数。
整理下思路记录下来,以备下次使用。
要获取图片资源,从来源上分为两种方式:一种是通过本地路径或远程URL获得图片,一种是直接根据字符串中的图像流获得图片。
/**
* 通过URL获得图片资源
* @param $url 本地或远程地址
*/
public function getImgByUrl($url)
{
$imgInfoArray = getimagesize($url);
$mimeArray = explode('/', $imgInfoArray['mime']);
switch ($mimeArray[1]) {
case "png":
$image = imagecreatefrompng($url);
break;
case "jpeg":
$image = imagecreatefromjpeg($url);
break;
case "jpg":
$image = imagecreatefromjpeg($url);
break;
case "gif":
$image = imagecreatefromgif($url);
break;
default:
$image = false;
}
return $image;
}
/**
* 通过字符串图像流获得图片资源
* @param $str 字符串的图像流
*/
public function getImgByStr($str)
{
$image = imagecreatefromstring($str);
return $image;
}
上面是根据已有图片获得图片资源,直接通过php生成图片资源就更简单了:
// 只记录创建真彩图像资源画布
$newImg = imagecreatetruecolor(宽, 高);
// 给画布填充颜色:RGB对应颜色十进制值
$color = imagecolorallocate($newImg, R, G, B);
// 上面是创建颜色,这里是填充操作
imagefill($newImg, 填充坐标X, 填充坐标Y, $color);
/**
* $newImg:上面新建的画布图
* $srcImg:载入的图片资源,将该图片合并到画布图上
* $dst_x / $dst_y:设置载入的图片在画布中左上角XY坐标值
* $src_x / $src_y:载入图片可选择只使用一部分原图,此处设置原图要使用的部分,左上角XY坐标值
* $dst_w / $dst_h:设置载入的图片在画布中宽高值
* $src_w / $src_h:载入图片可选择只使用一部分原图,此处设置原图要使用的部分,宽高值
* 最后四个参数灵活运用即可缩放载入的图片
*/
imagecopyresampled($newImg, $srcImg, $dst_x, $dst_y, $src_x, $src_y, $dst_w, $dst_h, $src_w, $src_h);
绘图过程中遇到绘制圆形头像,需要通过计算将头像的每个像素搬到画布上:
// 在画布上画圆形头像
$img = 画布资源;
// 头像可先缩放到合适大小(使用imagecopyresampled)
$avatarImg = 头像图资源;
// 正方形头像随便取一个值
$avatarWH = 图像宽或高;
$avatarX = 头像在画布的坐标X值;
$avatarY = 头像在画布的坐标Y值;
// 半径
$r = $avatarWH / 2;
for ($x = 0; $x < $avatarWH; $x++) {
for ($y = 0; $y < $avatarWH; $y++) {
// 获取像素点颜色
$color = imagecolorat($avatarImg, $x, $y);
if (((($x - $r) * ($x - $r) + ($y - $r) * ($y - $r) < ($r * $r)))) {
// 将上面获取到的像素点颜色绘制到画布上
imagesetpixel($img, $x + $avatarX, $y + $avatarY, $color);
}
}
}