验证码的制作(Canvas)

2023-11-02

目录

画布的知识点

1、绘图(创建画布) 

2、获取画步

3、获取画笔

4、绘制直线    

5、设置描边颜色

6、设置闭合路径

7、填充路径

8、设置填充颜色

9、画弧线

arc(x,y,r,开始角,结束角),方向

10、绘制矩形

rect(x,y,width.height)

11、绘制文本

12、移当前的坐标系

13、设置坐标系的旋转角度

  验证码制作

(1) 定义生成随机数的函数

(2)设置绘制验证码的区域:矩形、浅色背景

(3) 随机产生字符串

(4)随机产生5条干扰线,干扰线的颜色要浅一点

(5)随机产生40个干扰的小点


画布的知识点

1、绘图(创建画布) 

<canvas id = 'canvas' width='宽度',height=‘高度’>

2、获取画步

        通过getElementById(canvas的id)

3、获取画笔

        使用context对象

4、绘制直线    

let ctx = canvas.getContext('2d')

ctx.beginPath() //设置起点

ctx.stroke() //设置终点

5、设置描边颜色

ctx.strokeStyle = '#fff'

6、设置闭合路径

        closePath

ctx.beginPath()

 ctx.moveTo(rn(0, w), rn(0, h))


 ctx.lineTo(rn(0, w), rn(0, h))

 ctx.strokeStyle = rc(0, 160);

 ctx.closePath();

 ctx.stroke();

7、填充路径

        fill()

8、设置填充颜色

        fillStyle = ‘颜色’

9、画弧线

arc(x,y,r,开始角,结束角),方向

x,y:确定圆心的坐标

r:表示圆形或弧形的半径

开始角:表示弧点的起始位置,通常用Math.PI表示(可以理解为180度)

结束角:表示弧点的结束位置

10、绘制矩形

rect(x,y,width.height)

x,y表示矩形左上角的坐标

ctx.fillStyle = rc(128,128)

ctx.fillRect(0,0,w,h)

11、绘制文本

        context.fillText(text,x,y)

context.fillText(text,x,y)

context.fillStyle = 'red'

12、移当前的坐标系

context . translate(x,y)

13、设置坐标系的旋转角度

context.rotate(deg)


验证码制作

(1) 定义生成随机数的函数

  1.    随机颜色:随机生成 r,g,b       
function rn (min,max){ //随机数函数
    return parseInt(Math.random()*(max-min)+min)
}
function rc(min,max){ //随机颜色的函数
    var r = rn(min,max)
    var g = rn(min,max)
    var b = rn(min,max)
    return `rgb(${r},${g},${b})`
}

   (2)设置绘制验证码的区域:矩形、浅色背景

 var w = 120;
 var h = 40;
 var ctx = document.getElementById('canvas').getContext('2d')              
 ctx.fillStyle = rc(128, 128)
 ctx.fillRect (0, 0, w, h)

    (3) 随机产生字符串

var pool = 'abaahjffkhbvjkzvds'

let arr = [ ]

for(let i=0;i<4; i++){

    var c= pool[ rn(0,pool.length)]
    
    var fs = rn(18,40);
    
    var deg = rn(-30,30);
    
    ctx.font = fs +'px'
    
    ctx.textBaseline = 'top' //设置文本的基线

    ctx.fillStyle = rc(0,200)

    ctx.save();

    ctx.translate(30*i+15,15)

    ctx.rotate(deg*Math.PI / 180)

    ctx.fillText(c,-10,-15);

    ctx.restore()

    arr.push(c)

        (4)随机产生5条干扰线,干扰线的颜色要浅一点

        

for (var i=0;i<5;i++){

      ctx.beginPath()
        
      ctx.moveTo(rn(0,w),rn(0,h))

      ctx.lineTo(rn(0,w),rn(0,h))

      ctx.strokeStyle = rc(0,160);

      ctx.closePath();

      ctx.stroke();

}

        (5)随机产生40个干扰的小点

for(var i = 0; i< 40 ;i++){

    ctx.beginPath()
    
    ctx.arc(rn(0,w),rn(0,h), 1,0,,2*Math.PI) //随机确定圆心坐标

    ctx.closePaht()

    ctx.fillStyle = rc(0,200)  //随机填充颜色

    ctx.fill(); //进行填充

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

验证码的制作(Canvas) 的相关文章

随机推荐

  • 【大数据】Hive基础知识

    Hive基础知识 1 Hive 有哪些特点 Hive 最适合于数据仓库应用程序 使用该应用程序进行相关的静态数据分析 不需要快速响应给出结果 而且数据本身不会频繁变化 Hive 不是一个完整的数据库 Hadoop 以及 HDFS 的设计本身
  • 题目:企业发放的奖金根据利润提成。利润(I)低于或等于10万元时,奖金可提10%;利润高于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可以提成7.5%;20万到40万

    题目 企业发放的奖金根据利润提成 利润 I 低于或等于10万元时 奖金可提10 利润高于10万元 低于20万元时 低于10万元的部分按10 提成 高于10万元的部分 可以提成7 5 20万到40万之间时 高于20万元的部分 可提成5 40万
  • R语言的入门与学习

    目前我正在学习R语言 开始使用R软件时感到无从下手 即使是一些简单的任务 R的实现也不是很明显 但当我了解R的使用方法后 发现无论是简单的问题还是复杂的问题都可以用R语言得心用手的解决 希望通过日常分享一些R语言的知识 来促进我对R语言的学
  • 制作jflash下载算法,并解决堆栈溢出导致的写数据错误问题

    1 jflash下载算法介绍 jflash是segger开发的一款软件 需要配合jlink一起使用 使用过jlink的人都知道 在项目开发调试阶段非常有帮助 jflash下载算法就是实现当jflash中没有自己使用的芯片 或者想使用jfla
  • ELD透明屏在智能家居中有哪些优点展示?

    ELD透明屏是一种新型的显示技术 它能够在不需要背光的情况下显示图像和文字 ELD透明屏的原理是利用电致发光效应 通过在透明基板上涂覆一层特殊的发光材料 当电流通过时 发光材料会发出光线 从而实现显示效果 ELD透明屏具有许多优点 首先 它
  • K8S-Pod(基础)

    目录 一 k8s核心资源pod介绍 1 pod是什么 2 Pod如何管理多个容器 3 Pod网络 4 Pod存储 5 Pod工作方式 二 创建Pod资源 1 如何创建一个Pod资源 2 资源清单YAML文件书写技巧 3 通过资源清单文件创建
  • 基于UE4/Unity绘制地图 - 确定展示区域

    前言 基于UE4 Unity绘制地图基础元素 线 基于UE4 Unity绘制地图基础元素 面和体 基础知识 在研究清楚如何绘制地图的线面体之后 接下来需要确定需要展示的地图区域了 地图可以看成是一个巨型的开放世界游戏场景 因此为了便于数据存
  • mysql mvcc

    mysql MVCC MVVC 实现 排他锁 undolog 版本事务链 一致性read view视图 版本事务链匹配规则 一致性非锁定读 在 InnoDB 存储引擎中 多版本控制 multi versioning open in new
  • switch语句判断范围_Linux C语言: switch语句的范围判断!

    在C语言中 除了循环结构 还有的就是分支结构 分支结构中有if分支与switch分支 一般地 需要判断的条件情况少时 就使用if分支 当判断的情况复杂时 就会使用switch语句 假设有一道题目 要求用户输入一个整数 如果该整数为100 则
  • (C++)将引用用作函数参数——讲解+程序例子

    引用经常被用作函数参数 使得函数中的变量名成为调用程序中的变量的别名 通俗易懂的讲 就是将形参变成实参的别名 这种传递参数的方法称为按引用传递 C语言只能按值传递 按值传递导致被调用函数使用程序的值的拷贝 因此C语言采用按指针传递的方式 避
  • Mac在命令行中打开Finder

    在当前目录下 使用如下代码 open 即可打开当前Finder 并定位当当前目录
  • PowerDesigner V16.5 安装文件 及 破解文件

    之前在网上找个假的 只能看 不能创建自己的DB 或者 不能破解的 比较伤脑筋 偶在这里提供一个 可长期使用的版本 PowerDesigner165 破解文件 rar http pan baidu com s 1hqEDUCG 636KB P
  • 微信小程序涉嫌通过中断用户体验、限制用户操作的方式,收集与服务无关的用户个人信息,包括但不限于,手机号、

    微信小程序涉嫌通过中断用户体验 限制用户操作的方式 收集与服务无关的用户个人信息 包括但不限于 手机号 身份证号 生日 住址等 违反 微信小程序平台运营规则 及相关规则 建议尽快整改 具体运营规范 xxxxxxx 解决方法 增加同意协议 如
  • HBase RowKey设计和实现

    HBase由于存储特性和读写性能 在OLAP即时分析中发挥重要作用 Rowkey的设计好坏关乎到HBase的使用情况 我们知道HBase中定位一条数据需要四个维度的限制 RowKey Column Family Column Qualifi
  • Vue 3.3 新特性-defineModel

    Vue 3 3 新特性 defineModel使用 定义子组件 将原来的defineProps改为defineModel 当子组件变化是 父级组件也会变化 修改对应值
  • Assembler messages error gcc and clang build

    Assembler 错误 Assembler messages 除了自己写的汇编程序会报 Assembler Error外 编译GCC Clang等公开的计算机语言 也会报此错误 自己的汇编 修改自己程序代码 编译GCC Clang等 查看
  • sql: Oracle 11g create procedure

    CREATE OR REPLACE PROCEDURE proc Insert BookKindList temTypeName nvarchar2 temParent int AS ncount number begin SELECT C
  • 关于Navicat连接MySQL出现2059错误解决方法

    一 进入Navicat连接MySQL出现下面的2059界面 原因 mysql8之前版本中加密规则为mysql native password mysql8以后的加密规则为caching sha2 password 将mysql用户登录加密规
  • AI鸟类识别实现自然生态环境数字化监测

    判断一个城市是否生态 是否环保 鸟类往往比人类更加客观公正 更有 发言权 在东营人眼里 鸟类生存繁衍就是生态文明典范城市建设的 晴雨表 和 试金石 现在 很多鸟儿来到保护区都不想走 刘静说 在工作人员细致入微的保护下 很多候鸟都变成了 留鸟
  • 验证码的制作(Canvas)

    目录 画布的知识点 1 绘图 创建画布 2 获取画步 3 获取画笔 4 绘制直线 5 设置描边颜色 6 设置闭合路径 7 填充路径 8 设置填充颜色 9 画弧线 arc x y r 开始角 结束角 方向 10 绘制矩形 rect x y w