一、什么是canvas?

1.HTML5 <canvas> 元素用于图形的绘制,通过脚本 (通常是JavaScript)来完成。

2.<canvas> 标签只是图形容器,您必须使用脚本来绘制图形。

3.你可以通过多种方法使用 canvas 绘制路径,盒、圆、字符以及添加图像。

4.canvasc初始宽高300,150

二.功能实现

canvas 元素本身是没有绘图能力的。所有的绘制工作必须在 JavaScript 内部完成。

①功能需求:

1.需要的内容:字母数字组合(长度随机5-7,颜色随机,位置随机,大小随机);出现一些干扰信息(线条,圆)。

2.简单实现一下验证。

②代码部分:

1.html+css代码

    <div class="yzm">验证码:</div><canvas width="100" height="50"></canvas><input type="text"><button>验证</button><div class="trun1">验证成功</div><div class="false1">验证失败</div>
  canvas {background-color: #eee;position: relative;top: 20px;left: 300px;border: 1px solid;}input {width: 180px;height: 35px;font-size: 20px;}button {position: absolute;top: 29px;left: 416px;width: 80px;height: 50px;font-size: 20px;}.yzm {position: absolute;top: 35px;left: 30px;font-size: 26px;}.trun1{background-color:aqua;width: 189px;height: 20px;text-align: center;position: absolute;left: 115px;display: none;}.false1{background-color:red;width: 189px;height: 20px;text-align: center;position: absolute;left: 115px;display: none;}

2.js代码

var mixin = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNIPQRSTUVWXYZ"// 获取画布var canvas = document.getElementsByTagName('canvas')[0];//获取画笔var ctx = canvas.getContext('2d');//用来存储验证码var verify=""//随机验证码的个数var random = parseInt(getRandom(5, 5));// 用来控制验证码出现的位置var offx = 0;for (var i = 0; i < random; i++) {//入栈,保存之前画布的设置ctx.save()var text = texts();//随机字体的大小ctx.font = `${getRandom(15, 30)}px 楷体`// 随机字体的颜色ctx.fillStyle = `${getRandomColor()}`// ctx.rotate(Math.PI/180*30);//基线//控制文字的倾斜if(i%2){ctx.rotate(Math.PI/180*10)}else{ctx.rotate(-Math.PI/180*10)}//文字的对齐方式:top文本基线在文本块的顶部。ctx.textBaseline = 'top';// 对文本进行渲染ctx.fillText(text, offx, getRandom(0, 20))//文本文字进行递增offx += 20//存储验证码,方便验证verify+=text;//出栈恢复为画笔入栈时的状态ctx.restore();}//干扰线//线的起点ctx.moveTo(getRandom(0, 20), getRandom(0, 50));//线的终点ctx.lineTo(getRandom(80, 100), getRandom(0, 50));//对线进行连接ctx.closePath();//进行渲染 默认黑色ctx.stroke();ctx.moveTo(getRandom(0, 100), getRandom(0, 10));ctx.lineTo(getRandom(0, 100), getRandom(40, 50));ctx.closePath();ctx.stroke();//干扰圆//创建一个新的路径ctx.beginPath();ctx.arc(getRandom(25, 75), getRandom(10, 40), getRandom(4, 25), 0, Math.PI * 2);ctx.stroke();// console.log(verify);//验证var ipt = document.getElementsByTagName('input')[0];var btn = document.getElementsByTagName('button')[0];var trun1 =document.getElementsByClassName('trun1')[0];var false1 =document.getElementsByClassName('false1')[0];console.log(trun1);btn.onclick = function(){var value = ipt.value;value =value.toLowerCase();verify = verify.toLowerCase();console.log(verify);// console.log(verify);// console.log(value);if(verify == value){// console.log("32222");trun1.style.display = 'block'false1.style.display = 'none'}else{false1.style.display = 'block'trun1.style.display = 'none'}}//封装一个获取随机的验证码function texts() {var index = Math.floor(Math.random() * (mixin.length - 1));return mixin[index];}//封装一个随机数function getRandom(min, max) {return Math.random() * (max - min) + min;}//封装一个随机颜色function getRandomColor() {return `rgb(${getRandom(0, 255)},${getRandom(0, 255)},${getRandom(0, 255)})`}

三、canvas方法总结

1.线条  开始moveTo() 结束 lineTo()

2.矩形 1.rect(x.y,w,h)2.fillRect()3.strokeRect()

3.圆弧arc(x,y,r,起始弧度,结束弧度,方向)方向1逆时针2顺时针 默认顺时针

4.文本 strokeText(),fillText() 文本基线:textBaseline

5.阴影效果shadowColor shadowBlur shadowOffsetX shadowOffsetY

6.圆角矩形 arcTo(x1, y1, x2, y2, radius)

7.画笔样式   fillStyle = '颜色' 设置填充填充样式; strokeStyle = '颜色' 描边颜色;lineWidth = '10' 描边线条的宽度;font = '20px 宋体'; stroke() 进行描边渲染;fill() 进行填充渲染;beginPath() 重新开启一个路径;closePath() 闭合当前路径。

8.保存和恢复  save() 保存当前画布的属性的状态,存入栈中;restore() 从栈中出栈,将画布的状态进行恢复;

9.绘制图片 drawImage(img,x,y,w,h)

10.清画布 clearRect(x, y, width, height);、

最后,欢迎大家指正补充

canvas生成随机(颜色位置)验证码相关推荐

  1. c 语言随机验证码原理,用C生成随机中文汉字验证码的基本原理及代码.doc

    用C生成随机中文汉字验证码的基本原理及代码 用C#生成随机中文汉字验证码的基本原理 1.汉字编码原理 到底怎么办到随机生成汉字的呢?汉字从哪里来的呢?是不是有个后台数据表,其中存放了所需要的所有汉字, ...

  2. .NET C#生成随机颜色,可以控制亮度,生成暗色或者亮色 基于YUV模式判断颜色明亮度...

    .NET C#生成随机颜色,可以控制亮度,生成暗色或者亮色 基于YUV模式判断颜色明亮度 随机颜色在日常开发中很常用到,有时候要控制颜色明亮度,比如在白色背景网页上的随机颜色,一般要求颜色稍微暗一些, ...

  3. 用Python生成随机的中文验证码图片

    大家都在 Python论坛里讨论.交流,你还在等什么!赶快加入! 在登录很多网站的时候,他们已经不在使用简单的英文和数字的验证码,为了防止恶心注册和群发软件的侵袭,现在都开始使用中文的验证码了. 今天 ...

  4. 用C#生成随机中文汉字验证码的基本原理

    前几天去申请免费QQ号码,突然发现申请表单中的验证码内容换成了中文,这叫真叫我大跌眼镜感到好笑,Moper上的猫儿们都大骂腾讯采用中文验证码.^_^ 我不得不佩服腾讯为了防止目前网络上横行的QQ号码自 ...

  5. 用C#生成随机中文汉字验证码

    1.汉字编码原理 到底怎么办到随机生成汉字的呢?汉字从哪里来的呢?是不是有个后台数据表,其中存放了所需要的所有汉字,使用程序随机取出几个汉字组合就行了呢?使用后台数据库先将所有汉字存起来使用时随机取出 ...

  6. Python matplotlib 绘图自动生成随机颜色

    有一个项目需要用到绘图,但是由于变量数量不确定,也就不知道该画几条直线,就写了一个循环,每存在一个值,就绘制一条直线,颜色从颜色库里随机. 以下贴出关键代码: import matplotlib.co ...

  7. python 基于pillow模块生成随机图片验证码教程

    效果图 我们先来看一下大致的效果图. 以上图形都是用非常基础的元素随机构成的:点,线,曲线,文本.而pillow模块远远不止这些功能,如果学好了它,真的就是你想怎么花就怎么花. 那么现在我们就去学习一 ...

  8. java 验证码 算术_java生成图形验证码(算数运算图形验证码 + 随机字符图形验证码)...

    平凡也就两个字: 懒和惰; 成功也就两个字: 苦和勤; 优秀也就两个字: 你和我. 跟着我从0学习JAVA.spring全家桶和linux运维等知识,带你从懵懂少年走向人生巅峰,迎娶白富美! 关注微信 ...

  9. Android生成简单的图片验证码

    暑假的班级项目登录界面用到了验证码,就想着简单点弄个图片验证码好了.看了几篇文章还是有点儿懵.然后耐着性子把一篇关于验证码的文章分析了一下.果然还是得有耐心才行啊. ╰( ̄ω ̄o) 虽然大致是做出来了 ...

最新文章

  1. python列表推导式实现从1加到100_python之生成器和列表推导式
  2. Jmeter(4)Http Cookie Manager
  3. java中给变量赋值_java中变量赋值的理解
  4. FFMPEG avformat_open_input
  5. shell脚本--批量测试主机连通性ping IP
  6. windows 批处理 for循环语句
  7. 我和Django那些事儿(8)----相册django插件photologue,jQuery插件Slides
  8. python 下载csv文件保存到 redis
  9. python 交换机巡检脚本_Python自动巡检H3C交换机实现过程解析
  10. 系统没有安装vc9.注意是x86 32位_x86是多少位系统
  11. “熊猫烧香”病毒的原理
  12. 9.5.3 Android Apk 反编译 9.5.4 Android Apk 加密
  13. debian 7 安装 rz sz lrzsz
  14. 外贸大宗商品行业ERP管理解决方案
  15. 报错Takes no arguements解决办法
  16. 牛客网verilog刷题_VL47 格雷码计数器
  17. 数据库原理题型 - 综合应用题
  18. 【渝粤教育】电大中专电子商务网站建设与维护 (18)作业 题库
  19. 美信时代监控运维 助力银行“数字化转型”
  20. c语言程序设计 第三版 哈工大,C语言程序设计_哈工大(3):指针与结构体.pdf...

热门文章

  1. 2022-3-25 Leetcode 921.使括号有效
  2. 途家、爱彼迎、小猪等严禁“刷单”等滥用评价机制行为
  3. 2021-06-03Leetcode 438.找到字符串中所有字母异位词
  4. html地图根据坐标定位,百度地图js根据经纬度定位和拖动定位点
  5. 量具管理-查询及修改功能
  6. 基于CNN和FNN的进化神经元模型的快速响应尖峰神经网络(Matlab代码实现)
  7. 蔡高厅高等数学20-指数、对数、幂函数的连续性的证明
  8. 微信小程序侧边栏+语音记账本(主页面)
  9. linux c 内存泄漏,c – linux内核中潜在的内存泄漏?
  10. mysql 不存在 查询_mysql 查找不存在的id