一、在 PHP 中加载 GD 库
GD 库是一个开放的、动态创建图像的、源代码公开的函数库,可以从官网下载。目前,GD 库支持 GIF、PNG、JPEG、WBMP 和 XBM 等多种图像格式,用于对图像的处理。
GD 库在 PHP5 是默认安装的,但要激活 GD 库,必需设置 php.ini 文件。即将该文件中的“;extension=php_gd2.dll”选项前的分号“;”删除。保存修改后的文件并重启 Apache 服务器即可。
在成功加载 GD2 函数库后,可以通过 phpinfo() 函数来获取 GD2 函数库的安装信息,验证 GD 库是否安装成功。在浏览器中输入**“域名/phpinfo.php”**并按 Enter 键,在打开的页面中如果检索到下图中的 GD 库的安装信息,说明 GD 库安装成功。
phpinfo.php文件代码:
<?phpecho phpinfo();
二、图形图像的典型应用
1、创建一个简单的图像
使用 GD2 函数可以实现对各种图形图像的处理。创建画布是使用 GD2 函数库来创建图像的第一步,无论创建什么样的图像,首先都需要创建一个画布,其他操作都将在这个画布上完成。在 GD2 函数库中创建画布,可以通过 imagecreate() 函数实现。
【例1】使用 imagecreate()函数创建一个宽200像素、高60像素的画布,并且设置画布背景颜色RGB值为(225,66,159),最后输出一个 gif 格式的图像。代码如下:
<?php$img = imagecreate(200, 60); // 创建一个画布$white = imagecolorallocate($img, 225, 66, 159); // 设置画布的背景颜色header("content-type:image/gif"); // 定义输出图像类型imagegif($img); // 输出图像?>
2、使用 GD2 函数在照片上添加文字
PHP 中的 GD 库支持中文,但必须要以 UTF-8 编码格式来进行传递。如果使用 imageString()函数直接绘制中文字符就会出现乱码。这是因为 GD2 对中文只能接受 UTF-8 编码格式,并且默认使用英文字体。所以要输出中文字符串,必须对中文字符串进行转码,并设置中文字符串使用的字体,否则,输出的只能是乱码。
【例2】使用 imagettftext()函数将文字“万里长城”以 TTF 字体输出到图像中。
具体开发步骤:
(1)header()函数定义输出图像类型。
(2)imagecreatefromjpeg()函数载入照片。
(3)imagecolorallocate()函数设置输出字体颜色。
(4)定义输出的中文字符串所使用的字体(字体选用支持中文的字体格式)。
(5)imagettftext()函数向照片中添加文字。
(6)创建图像,然后释放资源。
代码如下:
<?phpheader("content-type:image/gif");$img = imagecreatefromjpeg('timg.jpg');$textcolor = imagecolorallocate($img, 56, 73, 136);$font = 'C:/Windows/Fonts/STFANGSO.TTF';$text = '万里长城';imagettftext($img, 80, 0, 100, 100, $textcolor, $font, $text);imagejpeg($img); // 建立 JPEG 图形imagedestroy($img); // 释放资源/*上面代码中,imagettftext()函数输出文字到照片上。其中,$img是指照片,80是字体的大小,0是文字的水平方向,100、100是文字的坐标值。$textcolor 是文字的颜色,$font 是字体,$text 是照片文字。*/
照片原图:
添加文字后的照片:
3、生成验证码
验证码的实现方法很多,有数字验证码、图形验证码和文字验证码等。本次介绍一种使用图像技术成长的验证码。
【例3】使用 GD2 函数创建一个 4 位的验证码,并且将生成的验证码保存在 session 变量中。代码如下:
<?phpsession_start();header("content-type:image/png");$new_number = '';$image_width = 200; // 设置图像宽$image_height = 40; // 设置图像高srand(microtime()*100000); // 设置随机数的种子for($i=0;$i<4;$i++){// 循环输出一个4位随机数$new_number .= dechex(rand(0,5));}$_SESSION['check_num'] = $new_number;// var_dump($_SESSION['check_num']);exit;$num_img = imagecreate($image_width, $image_height);imagecolorallocate($num_img, 255, 255, 255);for($i=0;$i<strlen($_SESSION['check_num']);$i++){$font = mt_rand(20,25);$x = mt_rand(1,8)+$image_width*$i/4;$y = mt_rand(1,$image_height/4);$color = imagecolorallocate($num_img, mt_rand(0,100), mt_rand(0,150), mt_rand(0,200)); // 设置字符颜色imagestring($num_img, $font, $x, $y, $_SESSION['check_num'][$i], $color);}imagepng($num_img);imagedestroy($num_img);