PHP生成带有干扰线的验证码,干扰点、字符倾斜
PHP生成验证码的类代码,本验证码类支持生成干扰点、干扰线等干扰像素,还可以使字符倾斜。在类中你可以定义验证码宽度、高度、长度、倾斜角度等参数,后附有用法:
<?php
class class_authcode{
public $authcode = ''; //验证码
private $width = ''; //验证码图片宽
private $height = ''; //验证码图片高
private $len = ''; //验证码长度
private $tilt = array(-30,30);//验证码倾斜角度
private $font = 'AlteHaasGroteskBold.ttf';//字体文件
private $str = ''; //验证码基
private $im = ''; //生成图片的句柄
//构造函数
function __construct($width=100,$heigh=30,$len=4) {
$this->width = $width;
$this->height = $heigh;
$this->len = $len;
$this->str = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';
$str_len = strlen($this->str)-1;
for ($i=0; $i<$len; $i++) {
$this->authcode .= $this->str[rand(0,$str_len)];
}
}
//生成验证码图片
private function imagecreate(){
$this->im = imagecreatetruecolor($this->width,$this->height);
}
//干扰颜色
private function ext_color() {
return imagecolorallocate($this->im,rand(50, 180),rand(50, 180),rand(50, 180));
}
//生成干扰点
private function ext_point() {
for ($i=0; $i<$this->width*2; $i++) {
imagesetpixel($this->im,rand(1,$this->width-1),rand(1,$this->height-1),$this->ext_color());
}
}
//生成干扰线
private function ext_line() {
for ($i=0; $i<$this->len; $i++) {
$x1 = rand(1,$this->width-1);
$y1 = rand(1,$this->height-1);
$x2 = rand(1,$this->width-1);
$y2 = rand(1,$this->height-1);
imageline($this->im,$x1,$y1,$x2,$y2,$this->ext_color());
}
}
//把验证码写入图片(不能和$this->imgstrfloat()同时使用)
private function imgstr() {
$old_x = 1;
for ($i=0; $i<$this->len; $i++) {
$fontsize = rand(2,5); //字体大小
$tmp_1 = $fontsize*2.5;
$tmp_2 = $i>0 $tmp_1 : 0;
$y = rand(1,$this->height/2);
$x = rand($old_x+$tmp_2, ($i+1)*($this->width)/$this->len-$tmp_1);
$old_x = $x;
$color = imagecolorallocate($this->im,rand(200, 255),rand(200, 255),rand(200, 255));
imagestring($this->im,$fontsize,$x,$y,$this->authcode[$i],$color);
}
}
//把验证码倾斜写入图片(注意这里不能和$this->imgstr()方法同时使用)
private function imgstrfloat() {
$old_x = 1;
for ($i=0; $i<$this->len; $i++) {
$fontfloat = rand($this->tilt[0],$this->tilt[1]);
$fontsize = rand(10,15); //字体大小
$tmp_1 = $i>0 $fontsize : 0;
$y = rand($fontsize+2, $this->height-2);
$x = rand($old_x+$tmp_1+2, ($i+1)*($this->width)/$this->len-$fontsize-2);
$old_x = $x;
$color = imagecolorallocate($this->im, rand(200, 255), rand(200, 255), rand(200, 255));
imagettftext($this->im, $fontsize, $fontfloat, $x, $y, $color, $this->font, $this->authcode[$i]);
}
}
//输出验证码图片
function output() {
$this->imagecreate();
$this->imgstr();
//$this->imgstrfloat();
$this->ext_point();
$this->ext_line();
header('content-type:image/png');
imagepng($this->im);
imagedestroy($this->im);
}
}
?>
本验证码用法说明:
$obj = new class_authcode();//实例化对象,并设置验证码图片的宽、高和验证码的长度
$obj->$authcode; //获取验证码
$obj->output(); //输出验证码图片
PHP生成带有干扰线的验证码,干扰点、字符倾斜的更多相关文章
- 利用java生成带有干扰线的网页验证码图片
package imageCreate; import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import j ...
- 利用canvas绘制带干扰线的验证码
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- django-simple-captcha 验证码干扰线随机点位
CAPTCHA_NOISE_FUNCTIONS = ( 'captcha.helpers.noise_null',# 设置样式 'captcha.helpers.noise_arcs',# 设置干扰线 ...
- JavaWeb开发之普通图片验证码生成技术与算术表达式验证码生成技术
转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/6134649.html 另:算术验证码生成的JSP.Servlet实现均已移植github:https:/ ...
- 动态生成能够局部刷新的验证码【AJAX技术】---看了不懂赔你钱
在开发JavaWeb应用时,动态生成能够局部刷新的验证码是一项必须的功能,在这里我们将会详细的讲解如何实现这一功能. 一.涉及技术 该功能需要用到AJAX异步传输技术,这样能保证在点击"看不 ...
- php使用imagettftext()函数有干扰线但是没有文字的问题解决
public function code() { //主要参数 if($font_size == 0) $font_size = 20; if($img_width == 0) $img_width ...
- 用Maven快速生成带有依赖的可执行jar包
一.背景 最近项目在做微服务的拆分,那么我们想让我们的容器启动更加的轻量级,所以我们选择放弃tomcat等容器,而是通过maven生成带有指定依赖的可执行jar包的方式进行处理,本文我将分享如何通过m ...
- 使用TuShare下载历史逐笔成交数据并生成1分钟线
使用如下代码从TuShare下载沪深300每只股票的历史成交记录并按股票.日期保存到本地.主要是为了以后查询方便快速. #-*- coding: utf-8 -*- import numpy as n ...
- 生成带有表格的word附件和动态赋值
生成带有表格的word附件和动态赋值, 表格前后需要添加一个特殊的开始和结束的域,表格第一列 TableStart:AuditJdcttbzInfo 和表格的最后一列 TableEnd:AuditJd ...
随机推荐
- sphinx set several dates as filter
http://sphinxsearch.com/forum/view.html?id=3187 > I think I may have found a bug. Yep, it looks w ...
- 【转】php缓冲 output_buffering和ob_start
原文: http://blog.csdn.net/21aspnet/article/details/7389427 php缓冲 output_buffering和ob_start buffer buf ...
- PHP 命名空间以及自动加载(自动调用的函数,来include文件)
这篇文章的目的是记录 1. php中的自动加载函数 __autoload(), 和 spl_autoload_register()函数, 2 .php中命名空间的使用. 一.当不使用命名空间的时候 a ...
- Scroll View 深入
转载自:http://mobile.51cto.com/hot-430409.htm 可能你很难相信,UIScrollView和一个标准的UIView差异并不大,scroll view确实会多一些方法 ...
- 使用traceview进行Android性能测试(转)
使用traceview进行Android性能测试(转) 使用traceview进行Android性能测试 原文链接:http://www.cnblogs.com/Android-and-androi ...
- Naive Bayes在mapreduce上的实现(转)
Naive Bayes在mapreduce上的实现 原文地址 http://www.cnblogs.com/sunrye/p/4553732.html Naive Bayes是比较常用的分类器,因为思 ...
- li里元素都浮动 li 在IE6 7 下方会产生4px间隙问题
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...
- python WEB接口自动化测试之requests库详解
由于web接口自动化测试需要用到python的第三方库--requests库,运用requests库可以模拟发送http请求,再结合unittest测试框架,就能完成web接口自动化测试. 所以笔者今 ...
- php 系列
1.给 跑在windows 环境下的php, 安装redis 拓展.(installing Redis & Redis extension in PHP on XAMPP on windows ...
- ssh密钥登录及远程执行命令
以192.168.1.104作为客户机 以192.168.1.103作为服务器 使用密钥登录 创建密钥对 在SSH客户机创建用户秘钥对 ssh-keygen -t rsa 之后全回车即可 将会在~/. ...