// <span style="white-space:pre"> </span>//因为要把产生的验证码保存到session中,此处为session开始
session_start();
//创建一张宽100高30的图像
$image = imagecreatetruecolor(100, 30);
//为$image设置背景颜色为白色
$bgcolor = imagecolorallocate($image, 255, 255, 255);
//填充背景颜色
imagefill($image, 0, 0, $bgcolor);

//生成4个随机数
/* for($i=0; $i<4; $i++){
//设置字体为6
$fontsize=6;
//设置背景颜色为随机颜色 三个rand()函数分别对应颜色的rgb让他们产生在0~120这个范围的数值
$fontcolor=imagecolorallocate($image, rand(0,120), rand(0, 120), rand(0,120));
//生成随机数字
$fontcontent=rand(0, 9);
//控制数字出现的位置x->left y->top
$x=($i*100/4)+rand(5, 10);
$y=rand(5, 10);

imagestring($image, $fontsize, $x, $y, $fontcontent, $fontcolor);

}
*/
$captch_code="";
for($i=0; $i<4; $i++){
$fontsize=50;
$fontcolor=imagecolorallocate($image, rand(0,120), rand(0,120), rand(0, 120));
$data="1234567890abcdefghigklmnopqrstuvwxyzABCDEFGHIGKLMNOPQRSTUVWXYZ";
//设置每次产生的字符从$data中每次截取一个字符
$fontcontent=substr($data, rand(0,strlen($data)), 1);
//让产生的四个字符拼接起来
$captch_code.=$fontcontent;
//控制每次出现的字符的坐标防止相互覆盖即x->left y->top
$x=($i*100/4)+rand(5, 10);
$y=rand(5, 10);
//此函数用来将产生的字符在背景图上画出来
imagestring($image, $fontsize, $x, $y, $fontcontent, $fontcolor);
}
$_SESSION['authcode']=$captch_code;//把产生的验证码存入session中
//用来在背景图片上产生200个干扰点
for($i=0; $i<200; $i++){
//干扰点的颜色
$pointcolor=imagecolorallocate($image, rand(50,200), rand(50, 200), rand(50, 200));
//该函数用来把每个干扰点在背景上描绘出来
imagesetpixel( $image, rand(1, 99), rand(1,29), $pointcolor);
}

//产生三条干扰线
for ($i=0; $i <3 ; $i++) {
# code...
//干扰线的颜色
$linecolor=imagecolorallocate($image, rand(80, 220), rand(80, 220), rand(80, 220));
//画出每条干扰线
imageline($image, rand(1, 99), rand(1, 29), rand(1, 99), rand(1,29), $linecolor);
}
//设置header图片格式为png
header('content-type:image/png');
//显示图片
imagepng($image);   //以 PNG 格式将图像输出到浏览器或文件

//destory
imagedestroy($image);  //图像处理完成后,使用 imagedestroy() 指令销毁图像资源以释放内存,虽然该函数不是必须的,但使用它是一个好习惯。

最新文章

  1. html radio check
  2. webservice的简单示例的实现步骤
  3. springmvc+mybatis+spring 整合
  4. Maven学习——安装与修改Maven的本地仓库路径
  5. python分割数组里面重复的元素
  6. matlab 画三维图函数
  7. Invalid object name ‘sys.configurations’. (Microsoft SQL Server, Error: 208)
  8. [译]Atomic VS. Non-Atomic 操作
  9. Linux系统使用-CentOS7 for Redis
  10. APP测试要点—UI、功能测试
  11. PHP全栈学习笔记12
  12. Oracle 11g设置IP访问限制
  13. artDialog记录
  14. 转:MVC,MVP 和 MVVM 的图示
  15. Xamarin Essentials教程屏幕常亮ScreenLock
  16. 牛客网 完数VS盈数
  17. CSS基础【2】:CSS常见属性
  18. 9.2 翻译系列:数据注解特性之---Column【EF 6 Code First系列】
  19. 从前端角度看ajax如何保护接口的安全性
  20. 微信小程序-flex布局中align-items和align-self区别

热门文章

  1. js-回文数
  2. js对象中属性调用.和[] 两种方式的区别
  3. struts访问jsp api内置对象的集中方式
  4. split分离特殊字符
  5. 前端基础(五):jQuery
  6. 三种方式构建C#单例模式
  7. 洛谷P2664 树上游戏——点分治
  8. docker学习系列-jdk基础镜像制作
  9. 再度吐槽,PHP在centos7的安装方式稍不注意可能就打击你的积极性
  10. BZOJ 2458: [BeiJing2011]最小三角形 (分治)