GD库,是php处理图形的扩展库。
php中处理图形和我们平常画画步骤类似:
1、创建画布------>准备画画的地方; 2、设置画笔------>选择画画的笔的颜色; 3、开始画画。
按每个步骤分开来说,创建画布,就是设置一块可以用来处理图形的区域,后面画的图形要确保在这个区域中,如果超出了设置的画布的区域,那画的东西就看不到了。
创建画布使用imagecreatetruecolor()来进行,它的具体格式如下:
//接收的参数是画布的宽和高,以像素pix表示,返回的是一个图像标识符resource imagecreatetruecolor ( int $width , int $height )
设置画笔则是选择画笔的颜色,使用imagecolorallocate()来进行设置:
//接收的参数第一个是图像标识符,后3个是RGB的色彩值int imagecolorallocate ( resource $image , int $red , int $green , int $blue )
来试着画个对角线:
1 $img = imagecreatetruecolor(200,150); //设置一个宽200pix,高150pix的画布 2 $red = imagecolorallocate($img,0xFF,0x00,0x00); //设置一支红色的画笔 3 imageline($img,0,0,200,150,$red); //画一条从(0,0)到(200,150)坐标的红色的线 4 header("content-type:image/png"); //image/png的类型 5 imagepng($img); //以png的格式输出 //imagepng($img,"myimg.png"); //将画出来的图像保存到myimg.png文件
来看看效果如何:
就是这么个效果,在200*150的画布上画了一条红色的对角线。
——————————————————————————————————
这种简单的图形似乎没什么作用,那我们找个日常能用到的东西来测试一下,那就是“万恶的验证码”了。
验证码的原理就是在一块画布上呈现的一组随机数,不过为了防止机器识别等问题,需要将这块画布上的东西弄的凌乱一些。
以一个最简单的验证码图形来试试gd库的应用:
1 <?php 2 //设置画布和画笔 3 $img = imagecreatetruecolor(45,25); 4 $red = imagecolorallocate($img,0xFF,0x00,0x00); 5 $white = imagecolorallocate($img,0xFF,0xFF,0xFF); 6 $black = imagecolorallocate($img,0x00,0x00,0x00); 7 imagefill($img,0,0,$black); 8 //设置4位随机数 9 $code = ‘‘; 10 for($i=0;$i<4;$i++){ 11 $code .= rand(0,9); 12 } 13 imagestring($img,5,5,5,$code,$red); //将生成的随机数放到画布上 14 for($i=0;$i<100;$i++){ 15 imagesetpixel($img,rand(0,40),rand(0,25),$white); //在画布上随机的画上100个像素点,形成噪点 16 } 17 18 header("content-type:image/png"); 19 imagepng($img);
上面的代码就是一个最简单的验证码图片的生成了,它生成的是一个黑色打底,4位随机红色数字的验证码图片,看一下效果:
如果感觉干扰太多的话,可以将噪点改为50个,那样干扰的像素点就会少很多,图片上的验证码就是显得比较清楚了。
————————————————————————————————————————————
给图片加水印也是平日里经常能用到的功能,这个水印可以是图片,也可以是文字。
写个例子来试试效果:
1 <?php 2 //要添加水印的图片 3 $img = imagecreatefromjpeg(‘./zjc3.jpg‘); 4 $red = imagecolorallocate($img,0xFF,0x00,0x00); 5 6 //要添加到图片上的图片,用的是前面生成后保存的验证码图片 7 $logo = imagecreatefrompng(‘./myimg1.png‘); 8 $size = getimagesize(‘myimg1.png‘); 9 imagecopy($img,$logo,5,5,0,0,$size[0],$size[1]); 10 11 //设置中文字体,如果不设置的话,添加中文水印会出现乱码 12 $font = "C:\Windows\Fonts\simsun.ttc"; 13 $size2 = getimagesize(‘zjc3.jpg‘); 14 15 //添加到图片上的中文为“王的女人” 16 imagettftext($img,30,0,$size2[0]-160,$size2[1]-20,$red,$font,"王的女人"); 17 18 header("content-type:image/jpeg"); 19 imagejpeg($img);
来看一下效果:
时间: 2024-10-11 03:44:47