PHP - GD库

来源:互联网 发布:大工软件学院 编辑:程序博客网 时间:2024/05/22 01:36

简介

GD库,是php处理图形的扩展库。
php中处理图形和我们平常画画步骤类似:
1、创建画布——>准备画画的地方;
2、设置画笔——>选择画画的笔的颜色;
3、开始画画。
按每个步骤分开来说,创建画布,就是设置一块可以用来处理图形的区域,后面画的图形要确保在这个区域中,如果超出了设置的画布的区域,那画的东西就看不到了。

创建画布使用imagecreatetruecolor()来进行,它的具体格式如下:

resource imagecreatetruecolor ( int $width , int $height )

它接收的参数是画布的宽和高,以像素pix表示,返回的是一个图像标识符。
设置画笔则是选择画笔的颜色,使用imagecolorallocate()来进行设置:

int imagecolorallocate ( resource $image , int $red , int $green , int $blue )

它接收的参数第一个是图像标识符,后3个是RGB的色彩值。

现在就可以进行操作(画画)了,用一个简单的对角线来尝试一下:

$img = imagecreatetruecolor(200,150);  //设置一个宽200pix,高150pix的画布$red = imagecolorallocate($img,0xFF,0x00,0x00); //设置一支红色的画笔imageline($img,0,0,200,150,$red); //画一条从(0,0)到(200,150)坐标的红色的线header("content-type:image/png"); //image/png的类型imagepng($img); //以png的格式输出//imagepng($img,"myimg.png"); //将画出来的图像保存到myimg.png文件

验证码

刚刚画的对角线在实际中并没有什么应用,单纯为熟悉一下GD库的使用,现在用个日常经常能遇到的东西来练习一下,没错那就是“验证码”!
验证码的基本原理就是在一块画布上呈现的一组随机数,不过为了防止机器识别等问题,需要将这块画布上的东西弄的凌乱一些(加些噪点)。
来尝试画一个最简单的验证码:

<?php//设置画布和画笔$img = imagecreatetruecolor(45,25);$red = imagecolorallocate($img,0xFF,0x00,0x00);$white = imagecolorallocate($img,0xFF,0xFF,0xFF);$black = imagecolorallocate($img,0x00,0x00,0x00);imagefill($img,0,0,$black);$code = rand(1000,9999);imagestring($img,5,5,5,$code,$red);  //将生成的随机数放到画布上for($i=0;$i<100;$i++){    imagesetpixel($img,rand(0,40),rand(0,25),$white);  //在画布上随机的画上100个像素点,形成噪点}header("content-type:image/png");imagepng($img);

上面的代码会生成一个黑色底,4位随机红色数字的验证码图片。
调整噪点的数量会明显的影响验证码图片的清晰程度。


图片水印

给图片加水印也是平日里经常能用到的功能,这个水印可以是图片,也可以是文字。
例如:

<?php//要添加水印的图片$img = imagecreatefromjpeg('./zjc3.jpg');$red = imagecolorallocate($img,0xFF,0x00,0x00);//要添加到图片上的图片,用的是前面生成后保存的验证码图片$logo = imagecreatefrompng('./myimg1.png');$size = getimagesize('myimg1.png');imagecopy($img,$logo,5,5,0,0,$size[0],$size[1]);//设置中文字体,如果不设置的话,添加中文水印会出现乱码$font = "C:\Windows\Fonts\simsun.ttc";$size2 = getimagesize('zjc3.jpg');//添加到图片上的中文为“王的女人”imagettftext($img,30,0,$size2[0]-160,$size2[1]-20,$red,$font,"王的女人");header("content-type:image/jpeg");imagejpeg($img);
0 0