canvas绘制验证码
css样式:
<style>
body{
text-align: center;
}
canvas{
background:#ddd;
}
</style>
body中添加标签canvas:
<canvas id="c3"></canvas>
js:
//创建两个变量保存验证码的宽度和高度
var w = 120;
var h = 30;
//将变量值赋值给canvas
c3.width = w;
c3.height = h;
//获取画笔
var ctx = c3.getContext("2d");
//创建两个函数,返回指定范围内的随机数,随机颜色
//随机数
function rn(min,max){
var n = Math.random()*(max-min)+min;
return Math.floor(n);
}
//随机颜色
function rc(min,max){
var r = rn(min,max);
var g = rn(min,max);
var b = rn(min,max);
return `rgb(${r},${g},${b})`;
}
//填充的背景
ctx.fillStyle=rc(180,230);
ctx.fillRect(0,0,w,h);
//创建一个随机的文字[字母和数字]4个
var pool = "ABCDEFGHIJKabced胡歌0123456789哈哼哈哈";
var str ="";
for(var i = 0;i<4;i++){
var index = Math.floor(Math.random()*pool.length);
str +=pool[index];
}
//console.log(str);
ctx.font = "30px SimHei";
ctx.fillStyle = rc(80,180);//文字颜色
ctx.textBaseline="top";
ctx.fillText(str,20,0);//在(20,0)处开始填充文字
//绘制6条干扰线
for(var i = 0;i<6;i++){
ctx.strokeStyle = rc(0,255);
ctx.beginPath();
ctx.moveTo(rn(0,w),rn(0,h));
ctx.lineTo(rn(0,w),rn(0,h));
ctx.stroke();
}
//绘制50个干扰点
for(var i = 0;i<50;i++){
ctx.fillStyle = rc(0,255);
ctx.beginPath();
ctx.arc(rn(0,w),rn(0,h),1,0,2*Math.PI);
ctx.fill();
}
最新文章
- C#+HtmlAgilityPack+XPath带你采集数据(以采集天气数据为例子)
- C#多线程之线程同步篇3
- composer 报错:Your requirements could not be resolved to an installable set of packages 解决方法
- java对国际化的支持
- git分支管理一
- CentOS 6 安装 python 2.7 和 mod_wsgi 运行pyocr[tesseract]
- BZOJ-2186 沙拉公主的困惑 线性筛(筛筛筛)+线性推逆元
- MySQL 数据库设计 笔记与总结(1)需求分析
- [转载] tmux的使用tips
- as自定义菜单。
- const 常量数据,只读
- asp.net gridview 绑定图片字段,图片不显示
- 《Linear Algebra and Its Applications》-chaper1-线性方程组- 线性变换
- Vim C/C++的一键编译
- Oracle 跨库 查询 复制表数据 分布式查询
- SpringMVC参数校验(针对`@RequestBody`返回`400`)
- [转载]MySQL UUID() 函数
- 转载:curl 模拟请求
- Django学习之三:django-admin 和 项目manage.py程序
- MDK编译过程