canvas绘制随机验证码
效果图:

思路:
1, 绘制canvas画布,进行基础设置
2.绘制一个矩形
3.设置验证码的随机数
4.设置验证码随机数的随机颜色
5.绘制随机干扰线
6,绘制随机干扰点
经过以上六个步骤,验证码的雏形就做好了
7.旋转验证码中的随机数(这部分在章节内详细说明)
8.重新获取验证码
缕清思路,然后一步步操作
1.进行canvas的基础操作
(1)在html中定义画布
<canvas id="canvas"></canvas>
(2)js定义
window.onload = function(){
var canvas = document.getElementById("canvas"); //获取到canvas对象
var context = canvas.getContext("2d"); //获取到canvas绘图环境
//设置画布大小
canvas.width = 120;
canvas.height = 40;
};
2.绘制矩形
context.strokeRect(0,0,120,40);
3.设置验证码的随机数
(1)定义一个数组存放验证码的随机数,我设置了数字和小写字母
var aCode = [0,1,2,3,4,5,6,7,8,9,'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'];
(2)设置验证码的随机数
for(var i = 0; i < 4; i ++){
var x = 20 + i * 20;
var y = 10 + Math.random() * 10;
var index = Math.floor(Math.random()*aCode.length); //获取到一个随机的索引值
var txt = aCode[index]; //获取到数组里面的随机的内容
context.font = "bold 20px 微软雅黑"; //设置文字样式
context.fillText(txt,x,y);
}
4.设置验证码随机数的随机颜色
(1)通过以上步骤可以看到已经出现了随机数,接下来需要设置随机数的随机颜色
function getColor(){
var r = Math.floor(Math.random() * 256);
var g = Math.floor(Math.random() * 256);
var b = Math.floor(Math.random() * 256);
if(r == 255 && g == 255 && b == 255){
r = 0;
g = 0;
b = 0;
}
return "rgb("+r+","+g+","+b+")";
}
(2)然后再将随机颜色加进去
context.fillStyle = getColor();
5.设置随机干扰线
//绘制干扰线
for(var i = 0; i < 8; i ++ ){
context.strokeStyle = getColor();
context.beginPath();
context.moveTo(Math.random()*120,Math.random()*40);
context.lineTo(Math.random()*120,Math.random()*40);
context.stroke();
}
6,绘制随机干扰点
干扰点和干扰线的原理是一样的,干扰点可以看成很小的干扰线
//绘制干扰点
for(var i = 0;i <20 ;i ++){
var x = Math.random() *120;
var y = Math.random() *40;
context.strokeStyle = getColor();
context.beginPath();
context.moveTo( x,y);
context.lineTo(x+1,y+1);
context.stroke();
}
7.旋转验证码中的随机数
因为canvas是一个画布,所以canvas中的内容只是“画”中的一部分,不能单独旋转,这里旋转的原理是每当绘制一个数字的之前将画布移动到相应数字的x,y的点,然后以点进行旋转,旋转好以后,绘制随机数,最后将画布还原到原来的位置进行下一个随机数的绘制
//产生随机数
for(var i = 0; i < 4; i ++){
var deg = Math.random() * 180 * Math.PI / 180;
var x = 20 + i * 20;
var y = 10 + Math.random() * 10;
var index = Math.floor(Math.random()*aCode.length); //获取到一个随机的索引值
var txt = aCode[index]; //获取到数组里面的随机的内容
context.font = "bold 20px 微软雅黑"; //设置文字样式
context.fillStyle = getColor();
context.translate(x,y);
context.rotate(deg);
context.fillText(txt,0,0);
context.rotate(-deg);
context.translate(-x,-y); }
8.重新获取验证码
重新获取验证码需要在body中添加一个点击事件
<a onclick="refresh()">重新获取</a>
然后将绘制随机数的代码封装成一个方法,我这里方法为draw(),canvas的刷新需要重新定义画布
function refresh(){
var canvas = document.getElementById("canvas"); //获取到canvas对象
var context = canvas.getContext("2d"); //获取到canvas绘图环境
draw(canvas,context);
}
注:腾讯课堂视频小结
canvas绘制随机验证码的更多相关文章
- canvas实现随机验证码
canvas实现随机验证码 知识点 canvas生成背景图和文字 设置字体样式和大小 String的fromCharCode(code码)生成大小写字母和数字 str.toLowerCase()转小写 ...
- 微信小程序 canvas 生成随机验证码
转载:https://blog.csdn.net/qq_16646819/article/details/81020245?utm_source=blogxgwz0 js // pages/bind/ ...
- canvas制作随机验证码
看到人家彩色背景的验证码想测试一下: 创建html代码: <canvas id="myCanvas" width="200" height="1 ...
- 用Canvas生成随机验证码(后端前端都可以)
一 .使用前端生成验证码 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> ...
- canvas绘制随机颜色的柱形图
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 【重点突破】——Canvas技术绘制随机改变的验证码
一.引言 本文主要是我在学习Canvas技术绘图时的一个小练习,绘制随机改变的验证码图片,虽然真正的项目里不这么做,但这个练习是一个掌握Canvas技术很好的综合练习.(真正的项目中验证码图片使用服务 ...
- 用canvas绘制验证码
在通常的登录界面我们都可以看到验证码,验证码的作用是检测是不是人在操作,防止机器等非人操作,防止数据库被轻而易举的攻破. 验证码一般用PHP和java等后端语言编写: 但是在前端,用canva或者SV ...
- canvas绘制圆心扇形可组成颜色随机的七色小花
啊~现在应该还是春天吧.心情一如既往的烦闷呐.最近做了一个canvas的扇形绘制的东西.把它整理出来变成一个适合春天的花朵绘制~沉闷的工作环境已经让我这种有趣的人也变成了无聊鬼怪呢.下次一定想找一个年 ...
- Android实现随机验证码——自定义View
一.问题描述 熟悉web开发中童鞋们都知道为了防止恶意破解.恶意提交.刷票等我们在提交表单数据时,都会使用随机验证码功能.在Android应用中我们同样需要这一功能,该如何实现呢,下面我们就自定义一个 ...
随机推荐
- python小游戏,石头/剪子/布
#从控制台输入石头(1)/剪子(2)/布(3) player=int(input("玩家出拳 石头(1)/剪子(2)/布(3)")) #电脑随机出拳 computer comput ...
- Ubuntu LNMP系统搭建Zabbix监控
系统环境 操作系统类型:Ubuntu 系统环境版本:4.4.0-122-generic IP地址:192.168.152.118 第一步:选择适当的操作系统类型与各项的版本要求,我这边直接使用LNMP ...
- CSS:margin和padding之谜
margin外边距,padding内边距.光看书本的介绍,理解起来好费劲,那咱就举个荔枝:你家的保险箱,是那种镶在墙壁里的,保险箱与墙壁的距离就是margin,保险箱壁就是所谓的border,保险箱与 ...
- CentOS7系统上的GPSTK示例代码调试 & 运行结果 & 心得
下载的源码程序包中,共有16个例子,这里记录它们的调试及运行结果,尤其是哪些可用,哪些不可用,今后使用时用作参考. 总结: (1)在 18 个示例程序中,example16 和 example17 编 ...
- DMA 内存存取原理
DMA直接内存存取原理 DMADMA直接内存存取原理是指外部设备不通过CPU而直接与系统内存交换数据的接口技术. 要把外设的数据读入内存或把内存的数据传送到外设,一般都要通过CPU控制完成,如CPU程 ...
- 在kali linux上安装VMware tool
在安全圈的门口徘徊了一年,一直不知道该如何入门,现在决定先从kali 入手.有同样兴趣的伙伴欢迎一起. 但是刚在VMware上安好系统就遇到了一个大麻烦,看了很多书,还有教程但总是遇到这样那样的问题. ...
- Kostya Keygen#2分析
主要就是构造408ede处的2A个字节.. 其中第一个字节必须为0x2D,倒数第二个字节必须为0x36,倒数第三个字节为0x31. 之后,对这个2A字节的缓冲区,要满足一些条件: 1\ 在408ede ...
- LoadRunner基本简介
# LoadRunner # ## 安装要求 ## 做性能测试的时候,电脑要是一个干净的系统. 尽量是裸装电脑纯净版,不能安装太多的浏览器,支持的有IE.Firefox.chrome ...
- javaScript简单的留言板
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title&g ...
- JS 判断两个时间的大小(可自由选择精确度:天,小时,分钟,秒)
//可自由选择精确度 如:签到时间:2018-11-07 11:00:00 签退时间:2018-11-07 10:59:59 //判断时间先后 //统一格式 var a = $("#fdtm ...