根据后台返回的字符来绘制验证码图形

开始之前还是看一下我们想要的效果
在这里插入图片描述
1,首先像图片当中这样的验证码图形,我们采用的canvas来绘制的
2,用户的输入是自主无控制的,所以我们在提交表单之前需要对用的验证码输入进行大小写的转换

//这里的code就是用户的输入
			 if( /[a-z]/.test(model_code) ){
                code = code.tolocaleLowerCase();   //小写转换
            }
            if( /[A-Z]/.test(model_code) ){
                code = code.toLocaleUpperCase();  //大写转换
            }

直接上canvas代码,新建一个Js,drawCanvas.js:

/**生成一个随机数**/
function randomNum(min,max){
	return Math.floor( Math.random()*(max-min)+min);
}
/**生成一个随机色**/
function randomColor(min,max){
	var r = randomNum(min,max);
	var g = randomNum(min,max);
	var b = randomNum(min,max);
	return "rgb("+r+","+g+","+b+")";
}


/**绘制验证码图片**/
function drawPic(num){
	var canvas=document.getElementById("canvas");
	var width = canvas.width;
	var height = canvas.height;
	var ctx = canvas.getContext('2d');
	ctx.textBaseline = 'bottom';

	/**绘制背景色**/
	ctx.fillStyle = randomColor(180,240); //颜色若太深可能导致看不清
	ctx.fillRect(0,0,width,height);
	/**绘制文字**/

	var txt = num;
	ctx.fillStyle = randomColor(50,160); //随机生成字体颜色
	ctx.font = randomNum(25,35)+'px SimHei'; //随机生成字体大小
	var x = 22;
	var y = 35;
	var deg = randomNum(-10, 8);
	//修改坐标原点和旋转角度
	ctx.translate(x,y);
	ctx.rotate(deg*Math.PI/180);
	ctx.fillText(txt, 0,0);
	// //恢复坐标原点和旋转角度
	ctx.rotate(-deg*Math.PI/180);
	ctx.translate(-x,-y);
/* } */
	/* /**绘制干扰线**/
	for(var i=0; i<8; i++){
		ctx.strokeStyle = randomColor(40,180);
		ctx.beginPath();
		ctx.moveTo( randomNum(0,width), randomNum(0,height) );
		ctx.lineTo( randomNum(0,width), randomNum(0,height) );
		ctx.stroke();
	} 
	/**绘制干扰点**/
	for(var i=0; i<100; i++){
		ctx.fillStyle = randomColor(0,255);
		ctx.beginPath();
		ctx.arc(randomNum(0,width),randomNum(0,height), 1, 0, 2*Math.PI);
		ctx.fill();
	} 
}

3,页面准备一个容器:

<canvas id="canvas" width="120" height="40" class="codeImg" title="看不清,换一张"></canvas>

4,在页面引用 drawCanvas.js,然后直接调用:

var model_code ;
$.ajax({
        type: "GET",
        url: '后台请求地址',
        xhrFields:{withCredentials:true},
        dataType: "json",
        success: function(data){
            if( data.operationStatus == 1){
				model_code = data.model;
                drawPic(data.model)
            }
        }
    });
    //点击切换验证码
 $("#canvas").on("click",function(){
		$.ajax({
			type: "GET",
            url:  '后台请求地址',
            xhrFields:{withCredentials:true},
			success:function(data){
				if( data.operationStatus == 1){
					model_code = data.model;
					drawPic(data.model)
				}
			}
		})
    }) 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值