canvas 绘制验证码

之前用canvas绘制了八卦图, 今天用canvas绘制的验证码, 很多地方都会用到, 记录下来 ,以后可以直接用

用到的方法

矩形

  canvas.getContext(‘2d‘);    //构建绘图环境

  canvas.clearRect(x,y,w,h);    //清空之前绘制的矩形,释放空间

  canvas.fillStyle=‘颜色‘;      //填充颜色

  canvas.fillStyle=‘rgb(r,g,b)‘;    //填充颜色

  canvas.fillRect(x,y,w,h);      //绘制矩形

文字

  canvas.font=‘12px  微软雅黑‘;    //字体大小,字体

  canvas.fillText(‘文字‘,x,y);      //在画布上写字(文字内容,x坐标,y坐标);

线条,路径(干扰线)

  canvas.beginPath();        //绘制线条,路径开始,子路经的集合

  canvas.moveTo(x,y);        //起始点

  canvas.lineTo(x,y);         //终止点

  canvas.strokeStyle=‘颜色‘;      //路径的颜色

  canvas.stroke();           //链接起始点和终止点

点,圆圈(干扰点)

  canvas.arc(x,y,z,0,2*Math.PI);      //完整圆(x,y,半径,起始角,结束角);起始角和结束角决定了该圆是否完整,取值范围[0,2]

其他

  Math.random();            //[0,1)之间的随机数

  Math.floor();              //向下取整

开始画验证码

1.定义一个画布,宽高不能写在style内

<canvas id="canvas" width="120" height="30" style="cursor: pointer;"></canvas>

2.获取并画布并构建绘图环境

var cas=document.querySelector(‘#canvas‘);
var ctx=cas.getContext(‘2d‘);     //构建绘图环境

3.绘制一个矩形,要求该矩形的背景色为随机(每次刷新页面的背景色都不一样);

3.1首先生成一个随机背景的方法,颜色参数(0,255);

    function ranbColor(min,max){
        var r=Math.floor(Math.random()*(max-min+1)+min);
        var g=Math.floor(Math.random()*(max-min+1)+min);
        var b=Math.floor(Math.random()*(max-min+1)+min);
        return ‘rgb(‘+r+‘,‘+g+‘,‘+b+‘)‘;
    }

3.2绘制矩形

    function draw(){
        ctx.fillStyle=ranbColor(170,250);   //这里背景色的取值范围为[170,250],颜色比较适中
        ctx.fillRect(0,0,120,30);    //绘制矩形
    }

4.四位随机数

4.1生成一个有范围的随机数

    function ranbNum(min,max){
        var num=Math.floor(Math.random()*(max-min+1)+min);
        return num;
    }

4.2生成一个四位数的随机数

        var data=‘qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM1234567890‘;
        for(var i=0;i<120;i+=30){  //循环四次,取四个字
            var c=data[ranbNum(0,data.length-1)]; //index为随机数,[0,data.length-1]  取字(随机)
            ctx.fillStyle=ranbColor(60,160);    //字体颜色
            ctx.font=ranbNum(15,40)+‘px SimHei‘;  //字体大小,字体
            ctx.fillText(c,i+ranbNum(5,12),ranbNum(15,30));   //字体填充(字内容,x轴,y轴)位置都是随机
        }
        

5.干扰线

        for (var i=0;i<10;i++) {
            ctx.beginPath(); //路径开始,子路经的集合
            ctx.moveTo(ranbNum(0,120),ranbNum(0,120));//起始点(x,y),都随机
            ctx.lineTo(ranbNum(0,120),ranbNum(0,120));//终止点(x,y)
            ctx.strokeStyle=ranbColor(60,160);//路径的颜色
            ctx.stroke();  //将上面的两个点连接起来
        }
        

6.干扰点,干扰圆圈

 //绘制干扰点
for (var i=0;i<10;i++) {
  ctx.beginPath(); //路径开始
  ctx.arc(ranbNum(0,120),ranbNum(0,30),ranbNum(1,5),0,2*Math.PI);//画圆(x,y,z,0,2*Math.PI) x坐标,y坐标,半径,完整圆
  ctx.strokeStyle=ranbColor(60,160);
  ctx.stroke();
}

完整代码, 通过点击事件来刷新文字内容和背景颜色

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
    </head>
    <body>
        <!--兼容ie9+-->
        <canvas id="canvas" width="120" height="30" style="cursor: pointer;"></canvas>
    </body>
</html>
<script>
    var cas=document.querySelector(‘#canvas‘);
    var ctx=cas.getContext(‘2d‘);
    draw();
    cas.onclick=function(){
        ctx.clearRect(0,0,120,30);   //清空之前的矩形,释放空间
        draw();
        //随机4位数
        var data=‘qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM1234567890‘;
        for(var i=0;i<120;i+=30){
            var c=data[ranbNum(0,data.length-1)]; //index为随机数,[0,data.length-1]  取字
            ctx.fillStyle=ranbColor(60,160);    //字体颜色
            ctx.font=ranbNum(15,40)+‘px SimHei‘;  //字体大小,字体
            ctx.fillText(c,i+ranbNum(5,12),ranbNum(15,30));   //字体填充(字内容,x轴,y轴)
        }

        //绘制干扰线
        for (var i=0;i<10;i++) {
            ctx.beginPath(); //路径开始,子路经的集合
            ctx.moveTo(ranbNum(0,120),ranbNum(0,120));//起始点(x,y),都随机
            ctx.lineTo(ranbNum(0,120),ranbNum(0,120));//终止点(x,y)
            ctx.strokeStyle=ranbColor(60,160);//路径的颜色
            ctx.stroke();  //将上面的两个点连接起来
        }

        //绘制干扰点
        for (var i=0;i<10;i++) {
            ctx.beginPath(); //路径开始
            ctx.arc(ranbNum(0,120),ranbNum(0,30),ranbNum(1,5),0,2*Math.PI);//画圆(x,y,z,0,2*Math.PI) x坐标,y坐标,半径,完整圆
            ctx.strokeStyle=ranbColor(60,160);
            ctx.stroke();
        }
    }

    //随机数方法
    function ranbNum(min,max){
        var num=Math.floor(Math.random()*(max-min+1)+min);
        return num;
    }
    //绘制矩形
    function draw(){
        ctx.fillStyle=ranbColor(170,250);   //这里背景色的取值范围为[170,250],颜色比较适中
        ctx.fillRect(0,0,120,30);    //绘制矩形
    }

    //颜色界于170到250,随机
    function ranbColor(min,max){
        var r=Math.floor(Math.random()*(max-min+1)+min);//170+[0,80)
        var g=Math.floor(Math.random()*(max-min+1)+min);//170+[0,80)
        var b=Math.floor(Math.random()*(max-min+1)+min);//170+[0,80)
        return ‘rgb(‘+r+‘,‘+g+‘,‘+b+‘)‘;
    }
</script>

效果(这里只有图片,没有点击的动态效果,需要自己在本地运行看效果)

原文地址:https://www.cnblogs.com/xiaoxinzi/p/8569334.html

时间: 2024-11-13 06:58:00

canvas 绘制验证码的相关文章

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; //获取画

Jquery制作图片验证码实例-canvas 绘制

CSS .identify-code{ position: absolute; right: 6px; top: 50%; width: 118px; height: 40px; margin: -21px 0 0 0; } HTML <span id="code" class="identify-code"> <canvas class="show-captcha" id="canvas" style=&q

html前端通过canvas生成验证码

1.页面调用js文件 <script type="text/javascript" src="js/jquery-1.11.3.js"></script> 2.html页面上面的布局,加粗为有效代码,剩下的自己页面css布局, <dd> <input type="text" class="input-yzm topAlign" id="verify" name=&q

用canvas绘制折线图

1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>用canvas绘制折线图</title> 6 </head> 7 <body> 8 <canvas id="cv"></canvas> 9 </body> 1

封装 用canvas绘制直线的函数--面向对象

1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>用面向对象的思想 封装 在canvas绘制直线的函数</title> 6 </head> 7 <body> 8 <canvas id="cv"></canvas> 9 &

canvas绘制时钟

<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>canvas绘制钟表</title> <style type="text/css"> #canvas{ /*border: 2px solid red;*/ display: block; margin: 0 auto; } </style> </

html5 Canvas绘制图形入门详解

html5,这个应该就不需要多作介绍了,只要是开发人员应该都不会陌生.html5是「新兴」的网页技术标准,目前,除IE8及其以下版本的IE浏览器之外,几乎所有主流浏览器(FireFox.Chrome.Opera.Safari.IE9+)都已经开始支持html5了.除此之外,在移动浏览器市场上,众多的移动浏览器也纷纷展开关于「html5的支持能力以及性能表现」的军备竞赛.html作为革命性的网页技术标准,再加上众多浏览器厂商或组织的鼎力支持,可以想见,html5将会成为未来网页技术的领头羊. ht

用h5中的canvas 绘制八卦图

1 <!doctype html> 2 <html> 3 <head> 4 <meta charset="UTF-8"> 5 <title>canvas绘制八卦图</title> 6 </head> 7 8 <body> 9 <canvas id="canvas" width="600" height="500"><

使用Canvas绘制图形的基本教程

原文地址:http://www.cnblogs.com/picaso/archive/2012/11/26/2789077.html HTML5火的正热,最近有个想法也是要用到HTML的相关功能,所以也要好好学习一把. 好好看了一下Canvas的功能,感觉HTML5在客户端交互的功能性越来越强了,今天看了一下Canvas绘图,下边是几个实例,记下以备后用. 1.使用Canvas绘制直线: <!doctype html> <html> <head> <meta ch