php中运用GD库实现简单验证码
昨天学习了运用php的GD库进行验证码的实现。
首先可以用phpinfo()函数看一下GD库有没有安装,我用的wampserver是自动给安装的。
主要的步骤是:
1、生成验证码图片
2、随机生成字符,画到图片上,并把生成的字符追加到验证码字符串中
4、把验证码字符串保存到$_SESSION中
5、随机生成干扰元素
下面贴代码,注释比较详细:
<?php
session_start();
$image_height = 30;
$image_width = 100;
$image = imagecreatetruecolor($image_width,$image_height);
//验证码背景颜色
$bgcolor = imagecolorallocate($image,255,245,255);
//从左上角像验证码图片填充背景色
imagefill($image,0,0,$bgcolor);
//验证码字符串
$captch_code ='';
//生成字符
for ($i = 0;$i<4;$i++){
// 随机字符颜色
$fontColor = imagecolorallocate($image,rand(0,120),rand(0,120),rand(0,120));
// 字符数据库
$data = 'abcdefghizklmnpqrstuvwxy0123456789';
// 随机选取字符
$fontContent = substr($data,rand(0,strlen($data))-1,1);
// 追加到验证码字符串
$captch_code.=$fontContent;
// 随机生成字符位置
$x = ($i*$image_width/4)+rand(0,$image_width/8);
$y = rand(0,$image_height/2);
//imagestring方法中默认字体为1-5
$font = 5;
imagestring($image,$font,$x,$y,$fontContent,$fontColor);
}
//用session储存验证码
$_SESSION['authcode']=$captch_code;
//画出干扰点
for ($i=0;$i<200;$i++){
$pointColor = imagecolorallocate($image,rand(50,200),rand(50,200),rand(50,200));
imagesetpixel($image,rand(0,$image_width),rand(0,$image_height),$pointColor);
}
//画出干扰线
for ($i=0;$i<3;$i++){
$lineColor = imagecolorallocate($image,rand(80,220),rand(80,220),rand(80,220));
imageline($image,rand(0,$image_width/2),rand(0,$image_height),rand($image_width/2,$image_width),rand(0,$image_height),$lineColor);
}
header('content-type:image/png');
imagepng($image);
imagedestroy($image);
?>
这样就实现了简单的验证码,当然还可对里边的字符进行扭曲的操作。
如果要实现中文的验证码在画字时要用到imagettftext($image, $size, $angle, $x, $y, $color, $fontfile, $text)这个函数,这里的$fontfile可以是支持中文的ttf字体的路径
php中运用GD库实现简单验证码的更多相关文章
- PHP 用session与gd库实现简单验证码生成与验证的类
验证码是为了防止机器灌水给网站带来污染以及增加服务器负担而出现的.目前大大小小的网站都有验证码.今天自己实现了一个简单的验证码类.说简单是因为没有加一些干扰的弧线等等,只是将文字旋转了一下.当然,因为 ...
- php中GD库的简单使用
在php中需要图像处理的地方GD库会发挥重要的作用,php可以创建并处理包括GIF,PNG,JPEG,WBMP以及XPM在内的多种图像格式,简单的举几个例子: 1.用GD库会创建一块空白图片,然后绘制 ...
- PHP5 GD库生成图形验证码(汉字)
PHP5 GD库生成图形验证码且带有汉字的实例分享. 1,利用GD库函数生成图片,并在图片上写指定字符imagecreatetruecolor 新建一个真彩色图像imagecolorallocate ...
- PHP配置环境中开启GD库
下配置好的PHP环境中,GD库不像windows那样可以直接用,而是默认关闭,需要把它打开,去到php.ini文件中 找到php_gd2.dll把分号去掉即可.(注:GD库跟绘制二维码等有关)
- 安装GD库解决ThinkPHP 验证码Call to undefined function Think\imagecreate()出错
在php中imagecreate函数是一个图形处理函数,主要用于新建一个基于调色板的图像了,然后在这个基础上我们可以创建一些图形数字字符之类的,但这个函数需要GD库支持,如果没有开启GD库使用时会提示 ...
- 使用Pillow库 创建简单验证码
使用Pillow生成简单的验证码 本想做成字体各自按随机角度倾斜, 但没有在Pillow中找到相关的方法 import randomfrom PIL import Image, ImageDraw, ...
- 基于GD库的php验证码类(支持中英文字体、背景、干扰点线、扭曲…….)
转自:http://www.blhere.com/1168.html 12345678910111213141516171819202122232425262728293031323334353637 ...
- PHP中使用GD库方式画时钟
<!--demo.html中内容--> <body> <img id="time" src="test.php" /> &l ...
- 关于PHP使用GD库生成的验证码无法在别处显示
https://segmentfault.com/q/1010000002522270
随机推荐
- 【转】iOS申请发布证书-图文详解
摘要 发布产品到App Store所需证书,2013年5月26日测试 IOS 发布证书 distribution 打包程序 真机调试证书 本文讲述发布证书的申请,申请真机调试证书请参考:http:// ...
- Puer是一个可以实时编辑刷新的前端服务器
##Puer是一个可以实时编辑刷新的前端服务器 确保你安装了nodejs(现在还有没nodejs环境的前端? 拖出去喂狗吧) 使用npm全局安装puer命令 npm install puer -g 输 ...
- python自学笔记
python自学笔记 python自学笔记 1.输出 2.输入 3.零碎 4.数据结构 4.1 list 类比于java中的数组 4.2 tuple 元祖 5.条件判断和循环 5.1 条件判断 5.2 ...
- 【USACO 1.5.2】回文质数
[题目描述] 因为151既是一个质数又是一个回文数(从左到右和从右到左是看一样的),所以 151 是回文质数. 写一个程序来找出范围[a,b](5 <= a < b <= 100,0 ...
- ubuntu系统mysql.h no such file or directory
在Ubuntu系统中,你已经安装了mysql,即你使用sudo apt-get install mysql-server mysql-client然而使用C语言访问mysql数据库时,却发现出现了如下 ...
- Python 可变对象和不可变对象
具体可以看这里:http://thomaschen2011.iteye.com/blog/1441254 不可变对象:int,string,float,tuple 可变对象 :list,dicti ...
- Solr4.8.0源码分析(18)之缓存机制(一)
Solr4.8.0源码分析(18)之缓存机制(一) 前文在介绍commit的时候具体介绍了getSearcher()的实现,并提到了Solr的预热warn.那么本文开始将详细来学习下Solr的缓存机制 ...
- angular-utils-pagination 使用案例
angular-utils-pagination是基于angular,bootstrap,jquery的一个分页插件,详细介绍以及使用方法参照: Git:https://github.com/mich ...
- 调用API函数,在窗口非客户区绘图(通过GetWindowDC获得整个窗口的DC,就可以随意作画了)
http://hi.baidu.com/3582077/item/77d3c1ff60f9fa5ec9f33754 调用API函数,在窗口非客户区绘图 GDI+的Graphics类里有个FromHdc ...
- Caused by: android.content.res.Resources$NotFoundException: String resource ID #0x0
如果遇到这个问题,首先考虑以下原因: 你是否在setText()方法中设置了一个int型变量,比如setText(10). 这样Android系统就会主动去资源文件当中寻找, 但是它不是一个资源文件I ...