GD库是php处理图形的扩展库,GD库提供了一系列用来处理图片的API,使用GD库可以处理图片,或者生成图片,也可以给图片加水印。
本章实现了生成图片并绘画各种形状、图片的压缩、中文字符水印及图片水印、基本验证码的生成和使用。对强大的GD库有基本的了解和使用。
GD库支持的图片格式:
PNG:
生成的图片显示显示最好
是一种无损压缩的位图片形格式
GIF:
生成的图片显示显示较好
JPEG:
一种标准的压缩名称,通常用来存储照片或者存储具有丰富色彩和色彩层次的图像,格式使用了有损压缩。
.....
各种图形绘画和文字显示:
1 //创建资源,一个画板,参数(长宽)
2 $cour=imagecreatetruecolor(500,500);
3
4 //创建一个颜色,参数(图片资源,R,G,B)
5 $color_B=imagecolorallocate($cour,0,0,255);
6 $color_R=imagecolorallocate($cour,255,0,0);
7 $color_G=imagecolorallocate($cour,0,255,0);
8 $color_RGB=imagecolorallocate($cour,255,255,255);
9
10 //区域填充颜色,参数(图片资源,x,y,颜色)
11 //只要坐标在区域范围,则当前区域会被填充
12 imagefill($cour,0,0,$color_RGB);
13
14 //画直线,参数(图片资源,起始x,起始y,终点x,终点y,颜色)
15 imageline($cour,10,20,100,100,$color_R);
16
17 //矩形,参数(图片资源,左上角x,y,右下角x,y,颜色)
18 //非填充
19 imagerectangle($cour,20,50,50,100,$color_G);
20 //填充
21 imagefilledrectangle($cour,50,20,100,50,$color_G);
22
23 //椭圆,圆,参数(资源,中心点x,y,长,高,颜色)
24 imageellipse($cour,100,100,50,50,$color_R);
25 imagefilledellipse($cour,50,50,50,50,$color_R);
26
27 //弧形,参数(椭圆参数,起始角度,结束角度,颜色)
28 imagearc($cour,120,110,50,50,-180,0,$color_G);
29 //imagefilledarc()
30
31 //画字
32 $strx="DONGxiaoDONG";
33 //横向画
34 imagestring($cour,5,330,330,$strx,$color_R);
35
36 //参数,(图像资源,大小,旋转,起始x,y,颜色,字体,内容)
37 $strx1="东小东";
38 imagettftext($cour,10,5,200,300,$color_G,"font/xy.ttf",$strx1);
39
40
41
42 //保存,imagepng,imagegif,imagejpeg
43 //jpeg最差,gif适中,png推荐
44 imagejpeg($cour,"xxx.jpg");
45
46 //销毁资源
47 imagedestroy($cour);
图片的压缩及裁剪:
1 <?php
2
3 //可以传递任意gif,png,jpeg格式图片
4
5 function openimg($strimg){
6 //得到图片信息,宽,高,类型
7 $imgmm=getimagesize($strimg);
8 //print_r($imgmm);
9 list($w,$h,$typex)=$imgmm;
10 //图片类型为1,2,3,所以需要0占位
11 $arrType=array("占位/必须","gif","jpeg","png");
12 //得到需要使用的函数
13 $createimg="imagecreatefrom".$arrType[$typex];
14 //得到图片资源
15 $cour=$createimg($strimg);
16
17
18 //创建一个颜色,参数(图片资源,R,G,B)
19
20 $color_R=imagecolorallocate($cour,255,0,0);
21
22
23 //参数,(图像资源,大小,旋转,起始x,y,颜色,字体,内容)
24 $strx1="东小东";
25 imagettftext($cour,20,0,$w-100,$h-100,$color_R,"font/xy.ttf",$strx1);
26
27 $destw=100;
28 $desth=100;
29
30 //缩放
31 $destimg=imagecreatetruecolor($destw,$desth);
32
33 //--------等比列-----------------------------------
34 if($destw&&($w<$h)){
35 $destw=($desth/$h)*$w;
36 }else{
37 $desth=($destw/$w)*$h;
38 }
39 //-------------------------------------------
40
41 //去掉黑边区域
42 $color=imagecolorallocate($destimg,255,255,255); //2.上色
43 imagecolortransparent($destimg,$color); //3.设置透明色
44 imagefill($destimg,0,0,$color);//4.填充透明色
45
46 //参数(需输出资源,原资源,目标起始点(x,y),原起始点,目标长高,原长高)
47
48 imagecopyresampled($destimg,$cour,0,0,0,0,$destw,$desth,$w,$h);
49 //剪切,函数相同,注意原大小应设置为目标大小
50 //imagecopyresampled($destimg,$cour,0,0,50,50,$destw,$desth,$destw,$desth);
51
52
53 //保存,与打开相似
54 $imgsave="image".$arrType[$typex];
55 $imgsave($cour,$strimg);
56 $imgsave($destimg,"new".$strimg);
57 echo "<img src=$strimg>";
58 echo "<img src='new$strimg'>";
59
60 //销毁资源
61 imagedestroy($cour);
62 imagedestroy($destimg);
63
64
65 }
66
67 //调用函数
68 $cour=openimg("zcy.gif");
文字及图片水印的生成:
1 //可以传递任意gif,png,jpeg格式图片
2
3 function openimg($strimg){
4 //得到图片信息,宽,高,类型
5 $imgmm=getimagesize($strimg);
6 //print_r($imgmm);
7 list($w,$h,$typex)=$imgmm;
8 //图片类型为1,2,3,所以需要0占位
9 $arrType=array("占位/必须","gif","jpeg","png");
10 //得到需要使用的函数
11 $createimg="imagecreatefrom".$arrType[$typex];
12 //得到图片资源
13 $cour=$createimg($strimg);
14
15
16 //创建一个颜色,参数(图片资源,R,G,B)
17 $color_R=imagecolorallocate($cour,255,0,0);
18
19 //文字水印
20 //参数,(图像资源,大小,旋转,起始x,y,颜色,字体,内容)
21 $strx1="东 小 东";
22 //长度除以3,是因为中文utf8占3个字节
23 //计算字符串整体宽高
24 $fontw=strlen($strx1)/3*imagefontwidth(7);
25 $fonth=imagefontheight(7);
26 imagettftext($cour,7,0,$w-$fontw-10,$h-$fonth,$color_R,"font/xy.ttf",$strx1);
27
28 //图片水印
29 $watermark=imagecreatefromgif("zcy.gif");
30 //得到图片信息,宽,高,类型
31 $imgmmx=getimagesize("zcy.gif");
32 list($ww,$hh)=$imgmmx;
33 //绘制图片水印,参数(原图片资源,水印图片资源,原图片开始位置x,y,水印图片开始x,y,宽,高)
34 imagecopy($cour,$watermark,10,10,0,0,$ww,$hh);
35
36
37 //保存,与打开相似
38 $imgsave="image".$arrType[$typex];
39 $imgsave($cour,"new".$strimg);
40 echo "<img src=new$strimg>";
41
42 //销毁资源
43 imagedestroy($cour);
44 imagedestroy($watermark);
45
46 }
47
48
49 //调用函数
50 $cour=openimg("xxx.png");
验证码的生成及使用详细:
创建:
1 <?php
2
3 //创建资源,一个画板,参数(长高)
4 $cour=imagecreatetruecolor(80,30);
5
6 //创建一个颜色,参数(图片资源,R,G,B)
7 $color_B=imagecolorallocate($cour,0,0,100);
8 $color_R=imagecolorallocate($cour,255,0,0);
9 $color_G=imagecolorallocate($cour,0,255,0);
10 $color_RGB=imagecolorallocate($cour,255,255,255);
11
12 //区域填充颜色,参数(图片资源,x,y,颜色)
13 //随机背景颜色
14 $color_TB=imagecolorallocate($cour,rand(200,255),rand(100,150),rand(200,255));
15 imagefill($cour,0,0,$color_TB);
16
17 //画直线,参数(图片资源,起始x,起始y,终点x,终点y,颜色)
18 imageline($cour,10,0,30,20,$color_R);
19 imageline($cour,0,15,80,6,$color_R);
20
21 //矩形,参数(图片资源,左上角x,y,右下角x,y,颜色)
22 //非填充
23 imagerectangle($cour,0,0,80-1,30-1,$color_G);
24
25
26 //生成验证码随机字符
27 $codes="3456789abcdefghkmnpqrstvuywzABCDEFGHIGKLMNPQRSTVUYWZ";
28 $endcode="";
29 for($i=0;$i<4;$i++){
30 $endcode.=$codes[rand(0,strlen($codes)-1)];
31 }
32
33
34
35 //参数,(图像资源,大小,旋转,起始x,y,颜色,字体,内容)
36 $strx1="东小".$endcode;
37
38
39 //加粗
40 imagettftext($cour,10,2,10,20,$color_RGB,"font/xy.ttf",$strx1);
41 imagettftext($cour,10,2,10,20,$color_R,"font/xy.ttf",$strx1);
42 imagettftext($cour,10,2,11,20,$color_B,"font/xy.ttf",$strx1);
43
44 //保存验证码信息到session
45 session_start();
46 $_SESSION["codex"]=$strx1;
47
48 //输出,imagepng,imagegif,imagejpeg
49 header("Content-type:image/png");
50 imagepng($cour);
51 //销毁资源
52 imagedestroy($cour);
显示:
1 <form action="lai.php" method="post" enctype="multipart/form-data">
2
3 <input type="text" name="codeyy">
4 <br>
5 <!--实现点击就更换一张-->
6 <img src="wan.php" onClick="this.src='wan.php'">
7 <br/>
8 <input type="submit" value="东小东上传">
9 </form>
获取:
1 session_start();
2 echo "验证码字符串为:".$_SESSION["codex"]."<br/>";
3 echo "输入的验证码为:".$_POST["codeyy"];
判断:
如果想不区分大小写,则可先统一转换大小写,再判断
原文出处:https://www.cnblogs.com/dongxiaodong/p/10075591.html
来源:oschina
链接:https://my.oschina.net/u/4325773/blog/3273291