最近做项目接触Vue,前端生成验证码。原理其实很简单,首先是生成随机数,然后用canvas绘制。
网上有一些现成的资料,没必要重复造轮子,我是在他们基础上完善了父组件,简化了子组件的调用:
  identify.vue(子组件):是一个独立的组件,负责生成验证码和绘制图片;
  codetest.vue(父组件):引入identify.vue(子组件),只有两个动作:发指令和接收验证码
 
 
直接上代码
identify.vue组件(主要用于定义参数和方法) 
<template>
<div class="s-canvas">
<canvas id="s-canvas" :width="contentWidth" :height="contentHeight"></canvas>
</div>
</template>
<script>
export default{
name: 'SIdentify',
props: {
fresh:true,
fontSizeMin: {
type: Number,
default: 20
},
fontSizeMax: {
type: Number,
default: 36
},
backgroundColorMin: {
type: Number,
default: 180
},
backgroundColorMax: {
type: Number,
default: 240
},
colorMin: {
type: Number,
default: 50
},
colorMax: {
type: Number,
default: 160
},
lineColorMin: {
type: Number,
default: 40
},
lineColorMax: {
type: Number,
default: 180
},
dotColorMin: {
type: Number,
default: 0
},
dotColorMax: {
type: Number,
default: 255
},
contentWidth: {
type: Number,
default: 112
},
contentHeight: {
type: Number,
default: 38
}
},
data() {
return {
identifyCodes: "1234567890",
identifyCode: ""
};
},
methods: {
// 生成一个随机数
randomNum (min, max) {
return Math.floor(Math.random() * (max - min) + min)
},
// 生成一个随机的颜色
randomColor (min, max) {
let r = this.randomNum(min, max)
let g = this.randomNum(min, max)
let b = this.randomNum(min, max)
return 'rgb(' + r + ',' + g + ',' + b + ')'
},
drawPic () {
let canvas = document.getElementById('s-canvas')
let ctx = canvas.getContext('2d')
ctx.textBaseline = 'bottom'
// 绘制背景
ctx.fillStyle = this.randomColor(this.backgroundColorMin, this.backgroundColorMax)
ctx.fillRect(0, 0, this.contentWidth, this.contentHeight)
// 绘制文字
for (let i = 0; i < this.identifyCode.length; i++) {
this.drawText(ctx, this.identifyCode[i], i)
}
// this.drawLine(ctx)
this.drawDot(ctx)
},
drawText (ctx, txt, i) {
ctx.fillStyle = this.randomColor(this.colorMin, this.colorMax)
ctx.font = this.randomNum(this.fontSizeMin, this.fontSizeMax) + 'px SimHei'
let x = (i + 1) * (this.contentWidth / (this.identifyCode.length + 1))
let y = this.randomNum(this.fontSizeMax, this.contentHeight - 5)
var deg = this.randomNum(-10, 10)
// 修改坐标原点和旋转角度
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)
},
drawLine (ctx) {
// 绘制干扰线
for (let i = 0; i < 3; i++) {
ctx.strokeStyle = this.randomColor(this.lineColorMin, this.lineColorMax)
ctx.beginPath()
ctx.moveTo(this.randomNum(0, this.contentWidth), this.randomNum(0, this.contentHeight))
ctx.lineTo(this.randomNum(0, this.contentWidth), this.randomNum(0, this.contentHeight))
ctx.stroke()
}
},
drawDot (ctx) {
// 绘制干扰点
for (let i = 0; i < 30; i++) {
ctx.fillStyle = this.randomColor(0, 255)
ctx.beginPath()
ctx.arc(this.randomNum(0, this.contentWidth), this.randomNum(0, this.contentHeight), 1, 0, 2 * Math.PI)
ctx.fill()
}
},
// 生成四位随机验证码
makeCode(o, l) {
this.identifyCode="";
for (let i = 0; i < l; i++) {
this.identifyCode += this.identifyCodes[
this.randomNum(0, this.identifyCodes.length)
];
} //绘制图片
this.drawPic() //传值给父组件
this.$emit('makedCode',this.identifyCode); }
},
watch: {
fresh () { //监听事件
this.makeCode(this.identifyCodes, 4);
}
},
}
</script>
 
codetest.vue(在页面进行使用):
 
<template>
<div class="code" @click="refreshCode">
<!-- :fresh:父组件向子组件传送刷新验证码的信号;
@makedCode:子组件向父组件传送验证码的值-->
<s-identify :fresh="flag" @makedCode="getMakedCode"></s-identify>
</div>
</template> <script>
import SIdentify from '@/components/identify.vue'
export default {
name: "codetest",
data() {
return {
flag:true, //该值变化,就会触发刷新
code:'', //刷新后的验证码
};
},
components : {
SIdentify,
},
// 验证码初始化
mounted() {
this.flag = !this.flag;
},
methods: {
// 切换验证码
refreshCode() {
this.flag = !this.flag;
},
getMakedCode(code){
this.code = code
console.log("getMakedCode:",this.code);
}
}
};
</script> <style>
.code {
/*margin: 400px auto;*/
width: 114px;
height: 40px;
/*border: 1px solid red;*/
}
</style>
 
测试效果:
 
aaarticlea/png;base64,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" alt="" />
 
 
 

vue生成图片验证码的更多相关文章

  1. Vue图片验证码-自定义组件高级版

    最近项目中要用到图片验证码,网上一查有很多,基本都是千篇一律的4位纯数字验证码.首先得感谢那位一代目兄台提供的模板,由于不能满足需求,所以对其进行了改造升级. 经改造的图片验证码能满足一下情形使用:① ...

  2. PHP生成图片验证码demo【OOP面向对象版本】

    下面是我今天下午用PHP写的一个生成图片验证码demo,仅供参考. 这个demo总共分为4个文件,具体代码如下: 1.code.html中的代码: <!doctype html> < ...

  3. vue实现验证码倒计时60秒的具体代码

    vue实现验证码倒计时60秒的具体代码 <span v-show="show" @click="getCode">获取验证码</span> ...

  4. python 全栈开发,Day85(Git补充,随机生成图片验证码)

    昨日内容回顾 第一部分:django相关 1.django请求生命周期 1. 当用户在浏览器中输入url时,浏览器会生成请求头和请求体发给服务端 请求头和请求体中会包含浏览器的动作(action),这 ...

  5. net生成图片验证码--转自Lisliefor

    目前,机器识别验证码已经相当强大了,比较常见的避免被机器识别的方法,就是将验证码的字符串连到一起,这样就加大的识别的难度,毕竟机器没有人工智能.我找了很多的.net生成图片验证码的例子,后来经过一些修 ...

  6. vue 登录验证码

    vue 登录验证码 最近在开发pc端项目,配合elementui使用 createCode() { var code = ""; var codeLength = 4; //验证码 ...

  7. python PIL图像处理-生成图片验证码

    生成效果如图: 代码 from PIL import Image,ImageDraw,ImageFont,ImageFilter import random # 打开一个jpg图像文件: im = I ...

  8. 在.net core web项目中生成图片验证码

    第1步:添加SkiaSharp包引用 Install-Package SkiaSharp 第2步:编写生成图片验证码的代码 using SkiaSharp; //在类文件头部添加引用 public I ...

  9. 【转载】Asp.Net生成图片验证码工具类

    在Asp.Net应用程序中,很多时候登陆页面以及其他安全重要操作的页面需要输入验证码,本文提供一个生成验证码图片的工具类,该工具类通过随机数生成验证码文本后,再通过C#中的图片处理类位图类,字体类,一 ...

随机推荐

  1. 3、jQuery的DOM基础

    DOM模型在页面文档中,通过树状模型展示页面的元素和内容,其展示的方式则是通过节点(node)来实现的. 3.1 访问元素 3.1.1 元素属性操作 Attr()可以对元素属性执行获取和设置操作,而r ...

  2. Vim快捷键整理

    Vim主要分为两种模式一种是Insert模式,该模式下可以像其它文本编辑器一样正常输入字符:另一种是Normal模式,该模式下Vim监听用户的按键可以对文本进行快速修改. 想要从Insert模式切换到 ...

  3. Openerp开发进销存系统总结

    转自 :http://blog.sina.com.cn/s/blog_7cb52fa80101ngt8.html 差不多用了2个星期的闲余事件,对于openerp v7.0进行了学习和应用开发.细节总 ...

  4. 强大的vim配置文件,让编程更随意(转)

    欢迎来到小码哥的博客 博客搬家啦 blog.ma6174.com 强大的vim配置文件,让编程更随意 花了很长时间整理的,感觉用起来很方便,共享一下. 我的vim配置主要有以下优点: 1.按F5可以直 ...

  5. Android低功耗蓝牙(BLE)使用详解

    代码地址如下:http://www.demodashi.com/demo/13390.html 与普通蓝牙相比,低功耗蓝牙显著降低了能量消耗,允许Android应用程序与具有更严格电源要求的BLE设备 ...

  6. SSI整合 示例

    sql语句 create table user_c (id varchar(10) primary key,name varchar(20),age int ,address varchar(30); ...

  7. mongodb - collMod

    该方法给集合添加一个标识,来修改集合的行为. 标识包含usePowerOf2Sizes和index. 命令格式为: db.runCommand({"collMod":<col ...

  8. 自实现部分string类的功能

    #define _CRT_SECURE_NO_WARNINGS #include<iostream> using namespace std; class MyString { publi ...

  9. Spring技术内幕:Spring AOP的实现原理(三)

    生成SingleTon代理对象在getSingleTonInstance方法中完毕,这种方法时ProxyFactoryBean生成AopProxy对象的入口.代理对象会封装对target目标对象的调用 ...

  10. 小电流MOS管

    N沟道: 2n7000 Id=0.35A 2n7002  Id=0.2A