PHP5中GD库生成图形验证码(有汉字)


Posted in PHP onJuly 28, 2013

利用PHP5中GD库生成图形验证码

PHP5中GD库生成图形验证码(有汉字) 

类似于下面这样
1.利用GD库函数生成图片,并在图片上写指定字符
imagecreatetruecolor 新建一个真彩色图像
imagecolorallocate 为一幅图像分配颜色(调色板)
imagestring 绘制字符
imageline 绘制线条
imagesetpixel 打像素点
2.输出图片
imagejpeg($img);
PHP实现过程,代码中注释详细,这里不做过多解释
verify.php

<?php 
//1.qi启用gd库GD库提供了一系列用来处理图片的API,使用GD库可以处理图片,或者生成图片。 
// 在网站上GD库通常用来生成缩略图或者用来对图片加水印或者对网站数据生成报表。 
session_start(); 
// 把GBK编码的字符串转换成UTF-8字符串,第一个参数之所以写GBK,是因为本php文件在主机中存储的编码是GBK编码 
// UTF-8编码浏览器普遍支持,通用性强,这里就转换成UTF-8 
$str = iconv("GBK", "utf-8", "芸芸众生绿水青山名胜古迹敞开心胸便会云蒸霞蔚快乐将永远伴随着你"); 
if(!is_string($str) || !mb_check_encoding($str,"utf-8")) 
{ 
exit("不是字符串或者不是utf-8"); 
} 
$zhongwenku_size; 
// 按UTF-8编码方式获取字符串的长度 
$zhongwenku_size = mb_strlen($str,"UTF-8"); 
// 把上述字符导入数组中 
$zhongwenku = array(); 
for( $i=0; $i<$zhongwenku_size; $i++) 
{ 
$zhongwenku[$i] = mb_substr($str, $i,1,"UTF-8"); 
} 
$result = ""; 
// 图片上要写入的四个字符 
for($i=0; $i<4; $i++) 
{ 
switch (rand(0, 1)) 
{ 
case 0: 
$result.=$zhongwenku[rand(0, $zhongwenku_size-1)]; 
break; 
case 1: 
$result.=dechex(rand(0,15)); 
break; 
} } 
$_SESSION["check"] = $result; 
// 创建一个真彩图片 宽100,高30 
$img = imagecreatetruecolor(100, 30); 
// 分配背景颜色 
$bg = imagecolorallocate($img, 0, 0, 0); 
// 分配文字颜色 
$te = imagecolorallocate($img, 255,255,255); 
// 在图片上写字符串 
//imagestring($img, rand(3,8), rand(1,70), rand(1,10), $result, $te); 
// 在图片上根据载入字体可以写出特殊字体 
imagettftext($img, 13, rand(2, 9), 20 ,20, $te, "MSYH.TTF",$result); 
$_SESSION["check"] = $result; 
for($i=0; $i<3; $i++) 
{ 
// $t = imagecolorallocate($img, rand(0, 255),rand(0, 255),rand(0, 255)); 
// 画线 
imageline($img, 0, rand(0, 20), rand(70,100), rand(0, 20), $te); 
} 
$t = imagecolorallocate($img, rand(0, 255),rand(0, 255),rand(0, 255)); 
// 为图片添加噪点 
for($i=0; $i<200; $i++) 
{ 
imagesetpixel($img, rand(1, 100), rand(1, 30), $t); 
} 
// 发送http头信息 指定本次发送的是image中的jpeg 
header("Content-type: image/jpeg"); 
// 输出jpeg图片至浏览器 
imagejpeg($img); 
?>

submit.php
<?php 
session_start(); 
if(@$_POST['check']) 
{ 
if($_POST["check"] == $_SESSION["check"]) 
{ 
echo" 恭喜你!验证码输入正确!"; 
}else{ 
echo" 不好意思验证码输入错误"; 
} 
} 
?> 
<form action="" method="post"> 
<img src="verify.php"/> </br> 
<input type="text" name="check"></br> 
<input type="submit" value="submit"></br> 
</form>

代码中MRYH.ttf 是你要设置的字体。
PHP 相关文章推荐
给apache2.2加上mod_encoding模块後 php5.2.0 处理url出现bug
Apr 12 PHP
初品cakephp 入门基础
Feb 16 PHP
php函数array_merge用法一例(合并同类数组)
Feb 03 PHP
PHP5中Cookie与 Session使用详解
Apr 30 PHP
解析PHP提交后跳转
Jun 23 PHP
php 启动时报错的简单解决方法
Jan 27 PHP
CI框架学习笔记(一) - 环境安装、基本术语和框架流程
Oct 26 PHP
PHP获取数组长度或某个值出现次数的方法
Feb 11 PHP
Codeigniter实现发送带附件的邮件
Mar 19 PHP
php类常量用法实例分析
Jul 09 PHP
PHP实现获取ip地址的5种方法,以及插入用户登录日志操作示例
Feb 28 PHP
PHP7变量处理机制修改
Mar 09 PHP
通过table标签,PHP输出EXCEL的实现方法
Jul 24 #PHP
Ajax+PHP快速上手及简单应用说明
Jul 24 #PHP
table标签的结构与合并单元格的实现方法
Jul 24 #PHP
ueditor 1.2.6 使用方法说明
Jul 24 #PHP
PHP与javascript实现变量交互的示例代码
Jul 23 #PHP
php curl基本操作详解
Jul 23 #PHP
如何使用FireFox插件FirePHP调试PHP
Jul 23 #PHP
You might like
超级实用的7个PHP代码片段分享
2012/01/05 PHP
PHP Global变量定义当前页面的全局变量实现探讨
2013/06/05 PHP
PHP的swoole扩展安装方法详细教程
2016/05/18 PHP
分享PHP-pcntl 实现多进程代码
2016/09/30 PHP
php打开本地exe程序,js打开本地exe应用程序,并传递相关参数方法
2018/02/06 PHP
YII框架页面缓存操作示例
2019/04/29 PHP
JQuery实现自定义对话框的代码
2008/06/15 Javascript
网页实时显示服务器时间和javscript自运行时钟
2014/06/09 Javascript
jquery实现标签支持图文排列带上下箭头按钮的选项卡
2015/03/14 Javascript
JavaScript中Null与Undefined的区别解析
2015/06/30 Javascript
Vue + Webpack + Vue-loader学习教程之相关配置篇
2017/03/14 Javascript
javascript过滤数组重复元素的实现方法
2017/05/03 Javascript
如何用input标签和jquery实现多图片的上传和回显功能
2018/05/16 jQuery
layer.open 子页面弹出层向父页面传输数据的例子
2019/09/26 Javascript
[32:17]完美世界DOTA2联赛循环赛LBZS vs Forest第二场 10月30日
2020/10/31 DOTA
实例讲解Python的函数闭包使用中应注意的问题
2016/06/20 Python
python Django里CSRF 对应策略详解
2019/08/05 Python
对Django 中request.get和request.post的区别详解
2019/08/12 Python
python使用 request 发送表单数据操作示例
2019/09/25 Python
python多进程间通信代码实例
2019/09/30 Python
python多线程使用方法实例详解
2019/12/30 Python
pytorch 归一化与反归一化实例
2019/12/31 Python
python如何通过闭包实现计算器的功能
2020/02/22 Python
python 插入日期数据到Oracle实例
2020/03/02 Python
Python基于BeautifulSoup爬取京东商品信息
2020/06/01 Python
OpenCV读取与写入图片的实现
2020/10/13 Python
Django多数据库联用实现方法解析
2020/11/12 Python
CSS3五个技巧给你的网站带来出色的效果
2009/04/02 HTML / CSS
css3 给页面加个半圆形导航条主要利用旋转和倾斜样式
2014/02/10 HTML / CSS
Html5大文件断点续传实现方法
2015/12/05 HTML / CSS
canvas 下载二维码和图片加水印的方法
2018/03/21 HTML / CSS
Janie and Jack美国官网:GAP旗下的高档童装品牌
2019/09/09 全球购物
机关搬迁方案
2014/05/18 职场文书
2015年幼儿园新年寄语
2014/12/08 职场文书
HTML CSS 一个标签实现带动画的抖音LOGO
2022/04/26 HTML / CSS
APP界面设计技巧和注意事项
2022/04/29 杂记