php生成图片验证码


Posted in PHP onJune 09, 2015

先给看下 大致的效果

php生成图片验证码

那么接下来的就直接贴代码吧

<?php
 $image = imagecreatetruecolor(100, 30); //创建画布
 $imagecolor = imagecolorallocate($image, 255, 255, 255); //背景色
 imagefill($image, 0, 0, $imagecolor); //填充背景色
 for($i=0;$i<4;$i++ ){     //循环4位数
  $fontsize = 6;
  $fontcolor = imagecolorallocate($image, rand(0, 200), rand(0, 200), rand(0, 200));
  $fontcontent = rand(0, 9);
  $x = $i*100/4 + rand(5, 15);
  $y = rand(5, 10);
  imagestring($image, $fontsize, $x, $y, $fontcontent, $fontcolor);
 }
 for($i=0;$i<200;$i++ ){    //循环 添加干扰点
  $pointcolor = imagecolorallocate($image, rand(50, 200), rand(50, 200), rand(50, 200));
  $x = rand(1, 99);
  $y = rand(1, 29);
  imagesetpixel($image, $x, $y, $pointcolor);
 }
 for($i=0;$i<3;$i++){    //循环 添加干扰线 
  $linecolor = imagecolorallocate($image, rand(100, 250), rand(100, 250), rand(100, 250));
  $x1 = rand(1, 25);
  $x2 = rand(50, 75);
  $y1 = rand(1, 15);
  $y2 = rand(15, 25);
  imageline($image, $x1, $y1, $x2, $y2, $linecolor);
 }
 header("content-type:image/png");
 imagepng($image);
 imagedestroy($image);
?>

再给大家分享一个可以生成中文验证码

<?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);

?>

再来一个实例吧

<?php
 
session_start();
function random($len) {
  $srcstr = "1a2s3d4f5g6hj8k9qwertyupzxcvbnm";
  mt_srand();
  $strs = "";
  for ($i = 0; $i < $len; $i++) {
    $strs .= $srcstr[mt_rand(0, 30)];
  }
  return $strs;
}
 
//随机生成的字符串
$str = random(4); 
 
//验证码图片的宽度
$width = 50;   
 
//验证码图片的高度
$height = 25;   
 
//声明需要创建的图层的图片格式
@ header("Content-Type:image/png");
 
//创建一个图层
$im = imagecreate($width, $height);
 
//背景色
$back = imagecolorallocate($im, 0xFF, 0xFF, 0xFF);
 
//模糊点颜色
$pix = imagecolorallocate($im, 187, 230, 247);
 
//字体色
$font = imagecolorallocate($im, 41, 163, 238);
 
//绘模糊作用的点
mt_srand();
for ($i = 0; $i < 1000; $i++) {
  imagesetpixel($im, mt_rand(0, $width), mt_rand(0, $height), $pix);
}
 
//输出字符
imagestring($im, 5, 7, 5, $str, $font);
 
//输出矩形
imagerectangle($im, 0, 0, $width -1, $height -1, $font);
 
//输出图片
imagepng($im);
 
imagedestroy($im);
 
$str = md5($str);
 
//选择 cookie
//SetCookie("verification", $str, time() + 7200, "/");
 
//选择 Session
$_SESSION["verification"] = $str;
?>

接下来只要在页面中调用就可以了:

<img id="checkpic" onclick="changing();" src='/images/checkcode.php' />

如果想实现 "看不清?换一张" 效果,添加如下 JS 到页面中

function changing(){
  document.getElementById('checkpic').src="/images/checkcode.php?"+Math.random();
}

以上所述就是本文的全部内容了,希望大家能够喜欢。

PHP 相关文章推荐
Memcache 在PHP中的使用技巧
Feb 08 PHP
PHP 截取字符串专题集合
Aug 19 PHP
学习php笔记 字符串处理
Oct 19 PHP
初学PHP的朋友 经常问的一些问题。不断更新
Aug 11 PHP
php操作SVN版本服务器类代码
Nov 27 PHP
php中存储用户ID和密码到mysql数据库的方法
Feb 06 PHP
php curl选项列表(超详细)
Jul 01 PHP
PHP引用(&amp;)各种使用方法实例详解
Mar 20 PHP
PHP实现数字补零功能的2个函数介绍
May 12 PHP
PHP计算百度地图两个GPS坐标之间距离的方法
Jan 09 PHP
phpStudy2016 配置多个域名期间遇到的问题小结
Oct 19 PHP
PHP使用openssl扩展实现加解密方法示例
Feb 20 PHP
php判断用户是否手机访问代码
Jun 08 #PHP
浅谈PHP中Stream(流)
Jun 08 #PHP
php实现有趣的人品测试程序实例
Jun 08 #PHP
老版本PHP转义Json里的特殊字符的函数
Jun 08 #PHP
php查询whois信息的方法
Jun 08 #PHP
Yii获取当前url和域名的方法
Jun 08 #PHP
在Linux系统的服务器上隐藏PHP版本号的方法
Jun 06 #PHP
You might like
PHP彩蛋信息介绍和阻止泄漏的方法(隐藏功能)
2014/08/06 PHP
跟我学Laravel之路由
2014/10/15 PHP
php mongodb操作类 带几个简单的例子
2016/08/25 PHP
Laravel 5.3 学习笔记之 安装
2016/08/28 PHP
javascript 验证日期的函数
2010/03/18 Javascript
javascript 实现 原路返回
2015/01/21 Javascript
js与jquery实时监听输入框值的oninput与onpropertychange方法
2015/02/05 Javascript
jQuery满屏焦点图左右滚动特效代码分享
2015/09/07 Javascript
JavaScript编写Chrome扩展实现与浏览器的交互及时间通知
2016/05/16 Javascript
详解Vue.js——60分钟组件快速入门(上篇)
2016/12/05 Javascript
浅析vue插槽和作用域插槽的理解
2019/04/22 Javascript
浅谈React Native 传参的几种方式(小结)
2019/05/21 Javascript
微信小程序如何访问公众号文章
2019/07/08 Javascript
使用layer.msg 时间设置不起作用的解决方法
2019/09/12 Javascript
layui动态渲染生成select的option值方法
2019/09/23 Javascript
vue父组件给子组件的组件传值provide inject的方法
2019/10/23 Javascript
Vue使用虚拟dom进行渲染view的方法
2019/12/26 Javascript
[01:20]2018DOTA2亚洲邀请赛总决赛战队Mineski晋级之路
2018/04/07 DOTA
python调用cmd命令行制作刷博器
2014/01/13 Python
Python中的yield浅析
2014/06/16 Python
高性能web服务器框架Tornado简单实现restful接口及开发实例
2014/07/16 Python
Python 网页解析HTMLParse的实例详解
2017/08/10 Python
python中的内置函数max()和min()及mas()函数的高级用法
2018/03/29 Python
浅析Python四种数据类型
2018/09/26 Python
一百行python代码将图片转成字符画
2021/02/19 Python
Python unittest生成测试报告过程解析
2020/09/08 Python
HTML5 的新的表单元素(datalist/keygen/output)使用介绍
2013/07/19 HTML / CSS
蔻驰意大利官网:COACH意大利
2019/01/16 全球购物
2014年办公室个人工作总结
2014/11/12 职场文书
2014年心理健康教育工作总结
2014/12/06 职场文书
辞职信的写法
2015/02/27 职场文书
护士2015年终工作总结
2015/04/29 职场文书
大学生暑期实践报告
2015/07/13 职场文书
小学体育组工作总结
2015/08/13 职场文书
python基础入门之普通操作与函数(三)
2021/06/13 Python
详细介绍Next.js脚手架完整搭建封装
2022/04/26 Javascript