生成验证码之前要知道以下几个函数:
1.创建画布
imagecreatetruecolor:新建一个真彩色图像
$img = imagecreatetruecolor(200,100);
2.创建颜色
imagecolorallocate:为一幅图像分配颜色
$color = imagecolorallocate($img,255,255,255);
3.填充
imagefill:区域填充
imagefill($img,0,0,$color);
4.画线
imageline: 画一条线段
$color = imagecolorallocate($img,0,0,255);
for($i=0;$i<10;$i++){
$x1 = rand(0,200);
$y1 = rand(0,100);
$x2 = rand(0,200);
$y2 = rand(0,100);
imageline($img,$x1,$y1,$x2,$y2,$color);
}
5.画点
imagesetpixel — 画一个单一像素
$color = imagecolorallocate($img,0,0,0);
//随机画10个点
for($i=0;$i<10;$i++){
$x = rand(0,200);
$y = rand(0,100);
imagesetpixel($img,$x,$y,$color);
}
6.画矩形
imagerectangle — 画一个矩形
imagefilledrectangle — 画一矩形并填充
$color = imagecolorallocate($img,0,255,0);
// imagerectangle($img,50,50,100,100,$color);
imagefilledrectangle($img,50,50,100,100,$color);
7.输出文字
imagettftext — 用 TrueType 字体向图像写入文本
$text = 'hello';
$color = imagecolorallocate($img,255,0,255);
$font = 'simsunb.ttf';
imagettftext($img,20,0,10,50,$color,$font,$text);
生成验证码
<?php
//案例:生成验证码
header('content-type:image/png');
//字符串,去掉不容易是别的i,l,o,I,L,O
$str = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
//画布
$width = 200;
$height = 100;
$img = imagecreatetruecolor($width,$height);
//颜色
$color = imagecolorallocate($img,0xcc,0xcc,0xcc);
//填充
imagefill($img,0,0,$color);
//画噪点
for($i=0;$i<100;$i++){
$color = imagecolorallocate($img,rand(0,100),rand(0,100),rand(0,100));
$x = rand(0,$width);
$y = rand(0,$height);
imagesetpixel($img,$x,$y,$color);
}
//画噪线
for($i=0;$i<30;$i++){
$color = imagecolorallocate($img,rand(0,100),rand(0,100),rand(0,100));
$x1 = rand(0,$width);
$y1 = rand(0,$height);
$x2 = rand(0,$width);
$y2 = rand(0,$height);
imageline($img,$x1,$y1,$x2,$y2,$color);
}
//画文字
$len = strlen($str);
$font = 'simsunb.ttf';
for($i=0;$i<4;$i++){
$color = imagecolorallocate($img,255,0,0);
$index = rand(0,$len-1);
$chr = substr($str,$index,1);
$x = 20 + ($i * 40);
$y = 80;
imagettftext($img,50,rand(-70,70),$x,$y,$color,$font,$chr);
}
//输出画布
imagepng($img);
//销毁画布
imagedestroy($img);