本节知识点:
- 画点
- 画线
- 画虚线
- 画矩形
- 画圆形
点
imagesetpixel(image, x, y, color):在image画布上的x y位置生成一个颜色为color的点
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
<?php // 创建一个画布 $im = imagecreatetruecolor(400,200); $back = imagecolorallocate($im,mt_rand(200,255),mt_rand(200,255),mt_rand(200,255)); imagefill($im,0,0,$back); $black = imagecolorallocate($im,10,10,10); // 画点 // imagesetpixel($im, 5, 5, $black); // 批量生成点 for($i=0;$i<200;$i++){ imagesetpixel($im, mt_rand(10,390), mt_rand(10,190), $black); } // 输出到浏览器中 header('Content-Type:image/jpeg'); imagejpeg($im,null,70); |
一般这种
线
imageline,传入image画布以及四个坐标还有颜色,四个坐标分别对应起始点的xy坐标以及终点xy坐标。
注意,下面的是代码段
1 2 3 4 5 |
// 批量生成线 $red = imagecolorallocate($im,10,0,0); for($j=0;$j<10;$j++){ imageline($im, mt_rand(10,400), mt_rand(10,200), mt_rand(10,400), mt_rand(10,200), $red); } |
通过批量生成点和批量生成线的结合我们就可以得到一个验证码的背景
可以改变画一条线的出席,在划线之前使用imagesetthickness(image, thickness)来设置,第二个参数越大就越粗。
如果要画虚线那么php不提供直接画虚线的函数,但是我们可以使用两个函数来实现imagesetstyle(image, style),style是一个数组,是颜色的组合需要注意的是使用了style了以后划线的最后一个参数就不再是颜色呢而是直接传入style。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
// 创建一个画布 并填充背景色 $im = imagecreatetruecolor(400,200); $back = imagecolorallocate($im,mt_rand(200,255),mt_rand(200,255),mt_rand(200,255)); imagefill($im,0,0,$back); // 批量生成点 $black = imagecolorallocate($im,255,255,255); for($i=0;$i<200;$i++){ imagesetpixel($im, mt_rand(10,390), mt_rand(10,190), $black); } // 批量生成线 $red = imagecolorallocate($im,255,160,122); for($j=0;$j<10;$j++){ imagesetthickness($im, 5); $style = array($red,$red,$red,$red,$red,$black,$black,$black,$black,$black); imagesetstyle($im, $style); // 设置划线的风格 imageline($im, mt_rand(10,400), mt_rand(10,200), mt_rand(10,400), mt_rand(10,200), IMG_COLOR_STYLED); } // 输出到浏览器中 header('Content-Type:image/jpeg'); imagejpeg($im,null,70); |
这样就可以得到一个随机背景、随机200个点、随机10条虚线的背景了。
画矩形
imagerectangle($im, 50, 50, 150, 100, $red);
前两个参数就是左上角的坐标,后两个参数就是长方形右下角的坐标,如果宽高相等就是一个正方形了。
画原型
imageellipse(image, cx, cy, width, height, color)
cx和cy是中心点坐标,这个函数是画椭圆的,当宽=高的时候就是个标准的圆形。在图形绘制上我们是通过调配参数来实现正方形和正圆形的,PHP并没有提供画正圆形和正方形的函数我们也不需要。
最后附上最终代码和效果:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
<?php $im = imagecreatetruecolor(400,200); $back = imagecolorallocate($im,mt_rand(200,255),mt_rand(200,255),mt_rand(200,255)); imagefill($im,0,0,$back); // 批量生成点 $black = imagecolorallocate($im,255,255,255); for($i=0;$i<200;$i++){ imagesetpixel($im, mt_rand(10,390), mt_rand(10,190), $black); } // 批量生成线 $red = imagecolorallocate($im,255,160,122); for($j=0;$j<10;$j++){ imagesetthickness($im, 5); $style = array($red,$red,$red,$red,$red,$black,$black,$black,$black,$black); imagesetstyle($im, $style); // 设置划线的风格 imageline($im, mt_rand(10,400), mt_rand(10,200), mt_rand(10,400), mt_rand(10,200), IMG_COLOR_STYLED); } imagerectangle($im, 50, 50, 150, 100, $red); imageellipse($im, 100, 100, 200, 130, $red); // 输出到浏览器中 header('Content-Type:image/jpeg'); imagejpeg($im,null,70); |