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 相关文章推荐
配置支持SSI
Nov 25 PHP
php中使用exec,system等函数调用系统命令的方法(不建议使用,可导致安全问题)
Sep 07 PHP
ajax完美实现两个网页 分页功能的实例代码
Apr 16 PHP
解析PHP处理换行符的问题 \r\n
Jun 13 PHP
8个必备的PHP功能开发
Oct 02 PHP
Zend Framework框架路由机制代码分析
Mar 22 PHP
PHP对象克隆clone用法示例
Sep 28 PHP
如何直接访问php实例对象中的private属性详解
Oct 12 PHP
thinkphp5 加载静态资源路径与常量的方法
Dec 24 PHP
关于 Laravel Redis 多个进程同时取队列问题详解
Dec 25 PHP
thinkphp 中的volist标签在ajax操作中的特殊性(推荐)
Jan 15 PHP
php中使用array_filter()函数过滤数组实例讲解
Mar 03 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/06/04 PHP
php将远程图片保存到本地服务器的实现代码
2015/08/03 PHP
php开发工具有哪五款
2015/11/09 PHP
TP5框架使用QueryList采集框架爬小说操作示例
2020/03/26 PHP
javascript 全角转换实现代码
2009/07/17 Javascript
Eval and new funciton not the same thing
2012/12/27 Javascript
JS小功能(setInterval实现图片效果显示时间)实例代码
2013/11/28 Javascript
nodejs事件的监听与触发的理解分析
2015/02/12 NodeJs
Javascript编写2048小游戏
2015/07/07 Javascript
js实现简单折叠、展开菜单的方法
2015/08/28 Javascript
详解vue-router 路由元信息
2017/09/13 Javascript
解决在Vue中使用axios POST请求变成OPTIONS的问题
2020/08/14 Javascript
Python实现读取及写入csv文件的方法示例
2018/01/12 Python
代码详解django中数据库设置
2019/01/28 Python
python实现beta分布概率密度函数的方法
2019/07/08 Python
使用pycharm在本地开发并实时同步到服务器
2019/08/02 Python
PyCharm更改字体和界面样式的方法步骤
2019/09/27 Python
在Python中使用MySQL--PyMySQL的基本使用方法
2019/11/19 Python
使用Python pip怎么升级pip
2020/08/11 Python
python实现文件+参数发送request的实例代码
2021/01/05 Python
css3动画 小球滚动 js控制动画暂停
2019/11/29 HTML / CSS
viagogo英国票务平台:演唱会、体育比赛、戏剧门票
2017/03/24 全球购物
Etam艾格英国官网:法国著名女装品牌
2019/04/15 全球购物
美国智能家居专家:tink
2019/06/04 全球购物
优秀毕业生推荐信
2013/11/02 职场文书
部队领导证婚词
2014/01/12 职场文书
高等教育学自荐书范文
2014/02/10 职场文书
领导失职检讨书
2014/02/24 职场文书
毕业自我鉴定怎么写
2014/03/25 职场文书
放飞中国梦演讲稿
2014/04/23 职场文书
学校欢迎标语
2014/06/18 职场文书
争当四好少年演讲稿
2014/09/13 职场文书
水利局群众路线专题民主生活会发言材料
2014/09/21 职场文书
先进单位事迹材料
2014/12/25 职场文书
创业计划书之情侣餐厅
2019/09/29 职场文书
python全面解析接口返回数据
2022/02/12 Python