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 相关文章推荐
PHP5 面向对象程序设计
Feb 13 PHP
php 中文处理函数集合
Aug 27 PHP
php中在PDO中使用事务(Transaction)
May 14 PHP
让Nginx支持ThinkPHP的URL重写和PATHINFO的方法分享
Aug 08 PHP
PHP获取MAC地址的函数代码
Sep 11 PHP
解析php DOMElement 操作xml 文档的实现代码
May 10 PHP
PHP实现的交通银行网银在线支付接口ECSHOP插件和使用例子
May 10 PHP
php中error与exception的区别及应用
Jul 28 PHP
PHP屏蔽过滤指定关键字的方法
Nov 03 PHP
php微信公众平台开发之获取用户基本信息
Aug 17 PHP
php设计模式之委托模式
Feb 13 PHP
php利用ffmpeg提取视频中音频与视频画面的方法详解
Jun 07 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设计模式 State (状态模式)
2011/06/26 PHP
几个实用的PHP内置函数使用指南
2014/11/27 PHP
php实现在限定区域里自动调整字体大小的类实例
2015/04/02 PHP
Laravel 默认邮箱登录改成用户名登录的实现方法
2019/08/12 PHP
js checkbox(复选框) 使用集锦
2009/04/28 Javascript
Jquery each方法跳出循环,并获取返回值(实例讲解)
2013/12/12 Javascript
13 款最热门的 jQuery 图像 360 度旋转插件推荐
2014/12/09 Javascript
JavaScript改变CSS样式的方法汇总
2015/05/07 Javascript
jQuery实现简单隔行变色的方法
2016/02/20 Javascript
详解Javascript继承的实现
2016/03/25 Javascript
微信公众号开发 实现点击返回按钮就返回到聊天界面
2016/12/15 Javascript
深入浅析Node环境和浏览器的区别
2018/08/14 Javascript
vue .js绑定checkbox并获取、改变选中状态的实例
2018/08/24 Javascript
详解JavaScript函数callee、call、apply的区别
2019/03/08 Javascript
详解Vue-Router源码分析路由实现原理
2019/05/15 Javascript
bootstrap table.js动态填充单元格数据的多种方法
2019/07/18 Javascript
Vue实现base64编码图片间的切换功能
2019/12/04 Javascript
node.js 微信开发之定时获取access_token
2020/02/07 Javascript
vue中axios封装使用的完整教程
2021/03/03 Vue.js
用virtualenv建立多个Python独立虚拟开发环境
2017/07/06 Python
详解python中的 is 操作符
2017/12/26 Python
对python3 urllib包与http包的使用详解
2018/05/10 Python
python3.X 抓取火车票信息【修正版】
2018/06/19 Python
Python库skimage绘制二值图像代码实例
2020/04/10 Python
matplotlib更改窗口图标的方法示例
2021/02/03 Python
校园餐饮创业计划书
2014/01/10 职场文书
学校十一活动方案
2014/02/01 职场文书
双创工作实施方案
2014/03/26 职场文书
企业口号大全
2014/06/12 职场文书
建筑专业毕业生求职信
2014/09/30 职场文书
卖车协议书范本4篇
2014/10/01 职场文书
学校政风行风评议心得体会
2014/10/21 职场文书
出国留学导师推荐信
2015/03/26 职场文书
详解MySQL 联合查询优化机制
2021/05/10 MySQL
python四个坐标点对图片区域最小外接矩形进行裁剪
2021/06/04 Python
关于python中模块和重载的问题
2021/11/02 Python