Canvas实现前端验证码
一、前言
canvas
技术允许我们通过javascript脚本来绘制html页面,通过canvas
我们可以绘制简单图形甚至开发简单游戏。本文主要讲述如何通过canvas
技术实现前端验证码功能
源码在本文最后,需要的自取
思路:
通过观察验证码,发现验证码主要包括三部分,背景画布、验证码、干扰线和干扰点,只需要实现这三部分就可以完成这个功能
遇到比较棘手的问题,应该学会如何去拆解问题,将大问题变成一堆小问题,再将小问题拆解成更细小的问题,你就会发现问题迎刃而解
二、实现
2.1 生成随机背景图
首先是html部分,只需要一个canvas画布
1 | <canvas id="canvas" width="240" height="76"></canvas> |
绘制背景图就是在这块空白的canvas上绘制一个矩形作为背景,因此我们只需要生成一个随机的颜色即可,而颜色是由三原色组成,也就是RGB,范围是0-255,因此我们只需要生成三个随机数作为RGB的三个值就能生成一个随机颜色
生成随机数和生成随机颜色我们会经常用到,因此写成公用方法
1 | /** |
我这里返回的字符串用了ES6
字符串模板的语法,使用字符串拼接也可以实现
然后开始绘制,颜色我取的从140开始,因为太小的颜色会特别暗,容易看不清楚,这个可以自己尝试
1 | /** |
2.2 生成随机验证码
验证码都是随机字母和数字,我们只需要定义一个数组,数组中是26个字母和数字,通过产生一些随机索引就可以产生随机字符和数字
1 | /** |
2.3 绘制验证码
在开始绘制之前有两个canvas
的api
需要解释一下,分别是save
和restore
,这两个方法分别用来保存画笔状态和还原画笔状态,这个画笔就是canvas
上下文,后面简称为画笔
比如我一共绘制六个验证码,整个canvas
画布一共240像素,相当于每个验证码占据60像素,每次循环都通过循环变量i
控制canvas
在对应格内随机生成一个位置来绘制字符
循环的过程如下,建议结合代码食用
- 通过
save
保存canvas
画笔初始状态(比如画笔颜色、位置等属性) - 为画笔生成随机字号,画笔颜色
- 将画笔移动到对应
格
中,并在对应格
内随机生成一个位置(如上图) - 随机将上下文旋转一个角度
- 通过
fillText
绘制文本 - 还原画笔(将画布还原到原来位置,还原颜色,字号,旋转情况等等)
1 | /** |
2.4 绘制干扰线和干扰点
这部分比较简单,干扰点就是生成随机位置绘制半径很小的圆形,干扰线就是随机生成几个坐标,绘制直线
直接上代码吧,这部分没什么需要解释的
1 | /** |
2.5 整体流程
canvas画布上定义一个点击函数
1 | <canvas id="canvas" width="240" height="76" onclick="paint()"></canvas> |
paint方法就是执行上面那些方法
1 | function paint() { |
然后在js脚本第一行执行这个方法即可
三、源码参考
1 |
|