本人使用的环境是windows下的,故需先启用GD库以支持图片函数的使用(GD库提供了一系列用来处理图片的API,使用GD库可以处理图片,或者生成图片),找到windows下的php.ini文件,去除 ";extension=php_gd2.dll"前面的分号,重启Apache就可以;
GD库函数的介绍:
imagecreate ( int $x_size , int $y_size ):新建一个基于调色板的图像;
imagecreatetruecolor ( int x_size, int y_size ) : 新建一个真彩色图像
imagecolorallocate ( resource $image , int $red , int $green , int $blue ):为一幅图像分配颜色,第一次对 imagecolorallocate() 的调用会给基于调色板的图像填充背景色,即用 imagecreate() 建立的图像。
imageline ( resource $image , int $x1 , int $y1 , int $x2 , int $y2 , int $color ):用 color 颜色在图像 image 中从坐标 x1 ,y1 到 x2 ,y2 (图像左上角为 0, 0)画一条线段。
imagesetpixel ( resource $image , int $x , int $y , int $color ):在 image 图像中用 color 颜色在 x ,y 坐标(图像左上角为 0,0)上画一个点。
imagestring ( resource $image , int $font , int $x , int $y , string $s , int $col ):用 col 颜色将字符串 s 画到 image 所代表的图像的 x ,y 坐标处(这是字符串左上角坐标,整幅图像的左上角为 0,0)。如果 font 是 1,2,3,4 或 5,则使用内置字体。
imagejpeg($img):以 JPEG 格式将图像输出到浏览器或文件。
以上函数使用方法详见综合实例
bool imageellipse ( resource $image , int $cx , int $cy , int $w , int $h , int $color ):在 image 所代表的图像中画一个中心为 cx ,cy (图像左上角为 0, 0)的椭圆。w 和 h 分别指定了椭圆的宽度和高度,椭圆的颜色由 color 指定。
example:
<?php
// 新建一个空白图像
$image = imagecreatetruecolor(400, 300);
// 填充背景色
$bg = imagecolorallocate($image, , , );
// 选择椭圆的颜色
$col_ellipse = imagecolorallocate($image, 255, 255, 255);
// 画一个椭圆
imageellipse($image, 200, 150, 300, 200, $col_ellipse);
// 输出图像
header("Content-type: image/png");
imagepng($image);
?>
imagearc ( resource $image , int $cx , int $cy , int $w , int $h , int $s , int $e , int $color ):以 cx ,cy (图像左上角为 0, 0)为中心在 image 所代表的图像中画一个椭圆弧。w 和 h 分别指定了椭圆的宽度和高度,起始和结束点以 s 和 e 参数以角度指定。0°位于三点钟位置,以顺时针方向绘画。
example:
<?php
// 创建一个 200X200 的图像
$img = imagecreatetruecolor(200, 200);
// 分配颜色
$white = imagecolorallocate($img, 255, 255, 255);
$black = imagecolorallocate($img, , , );
// 画一个黑色的圆
imagearc($img, 100, 100, 150, 150, , 360, $black);
// 将图像输出到浏览器
header("Content-type: image/png");
imagepng($img);
// 释放内存
imagedestroy($img);
?>
imagepolygon ( resource $image , array $points , int $num_points , int $color ):在图像中创建一个多边形。points 是一个 PHP 数组,包含了多边形的各个顶点坐标,即 points[0] = x0,points[1] = y0,points[2] = x1,points[3] = y1,以此类推。num_points 是顶点的总数。
example:
<?php
// create a blank image
$image = imagecreatetruecolor(400, 300);
// fill the background color
$bg = imagecolorallocate($image, , , );
// choose a color for the polygon
$col_poly = imagecolorallocate($image, 255, 255, 255);
// draw the polygon
imagepolygon($image,
array (
, ,
100, 200,
300, 200
),
3,
$col_poly);
// output the picture
header("Content-type: image/png");
imagepng($image);
?>
imagerectangle ( resource $image , int $x1 , int $y1 , int $x2 , int $y2 , int $col ):用 col 颜色在 image 图像中画一个矩形,其左上角坐标为 x1, y1,右下角坐标为 x2, y2。图像的左上角坐标为 0, 0。
example:
<?php
$img = imagecreate(200,200);
//imagerectangle ( resource $image , int $x1 , int $y1 , int $x2 , int $y2 , int $col )
$backgroundcolor = imagecolorallocate($img,0,0,0);//背景颜色黑色
$white = imagecolorallocate($img,255,255,255);//白色
$blue = imagecolorallocate($img,0,0,255);//蓝色
$green = imagecolorallocate($img,0,255,0);//绿色
//在$img中画两个大小变化的矩形:
imagerectangle($img,rand(20,180),rand(20,180),rand(20,180),rand(20,180),$green);
imagerectangle($img,rand(20,180),rand(20,180),rand(20,180),rand(20,180),$blue);
//设置编码
header("content-type:image/jpeg");
//将图片显示于浏览器:
imagejpeg($img);
?>
综合实例:(图片验证码制作:)
test.php图片文件:(内容如下:)
<?php
session_start();
for($i=1;$i<=4;$i++)
{
$rand.=dechex(rand(1,15));
}
$_SESSION['check_img'] = strtolower($rand);
$img = imagecreate(60,28);//新建一个基于调色板的图像,语法:resource imagecreate ( int $x_size , int $y_size )
$backgroundcolor = imagecolorallocate($img,0,0,0);//为一幅图像分配颜色,第一次对 imagecolorallocate() 的调用会给基于调色板的图像填充背景色,即用 imagecreate() 建立的图像。语法:int imagecolorallocate ( resource $image , int $red , int $green , int $blue )
$white = imagecolorallocate($img,255,255,255);//白色
$blue = imagecolorallocate($img,0,0,255);//蓝色
$green = imagecolorallocate($img,0,255,0);//绿色
$red = imagecolorallocate($img,255,0,0);//红色
for($i=1;$i<=100;$i++)
{
imageline($img,0,0,rand(20,60),rand(10,28),$blue);//imageline ( resource $image , int $x1 , int $y1 , int $x2 , int $y2 , int $color ),用 color 颜色在图像 image 中从坐标 x1 ,y1 到 x2 ,y2 (图像左上角为 0, 0)画一条线段。
imagesetpixel($img,rand(2,60),rand(3,28),$green);//imagesetpixel ( resource $image , int $x , int $y , int $color ),在 image 图像中用 color 颜色在 x ,y 坐标(图像左上角为 0,0)上画一个点。
}
imagestring($img,5,rand(3,23),rand(3,12),$rand,$white);//imagestring ( resource $image , int $font , int $x , int $y , string $s , int $col ),用 col 颜色将字符串 s 画到 image 所代表的图像的 x ,y 坐标处(这是字符串左上角坐标,整幅图像的左上角为 0,0)。如果 font 是 1,2,3,4 或 5,则使用内置字体。
header("content-type:image/jpeg");
imagejpeg($img);//以 JPEG 格式将图像输出到浏览器或文件
?>
lo.php测试验证码文件(内容如下):
<?php
session_start();
header("content-type:text/html;charset=utf-8");
if($_POST['submit'])
{
$check_yzm = strtolower($_POST['check_img']);
if($check_yzm==$_SESSION['check_img'])
echo "验证码正确";
else
echo "验证码错误";
}
?>
<form action="<?=$_SERVER['PHP_SELF']?>" method="post">
<p><img src="test.php" /></p>
<p><input type="text" name="check_img" /></p>
<p><input type="submit" name="submit" value="提交" /></p>
</form>
该两文件同放于一目录,当我们访问lo.php时,即能看到验证码的效果;
备注:此文若有任何不足或遗漏,望指出,多谢···
李汉团 5th,Sep 2011