首页 > 编程语言 >视频直播源码,前端canvas动态验证码实现

视频直播源码,前端canvas动态验证码实现

时间:2023-03-10 14:23:01浏览次数:35  
标签:canvas const min ctx 验证码 randomNum 源码 Math

视频直播源码,前端canvas动态验证码实现

 

 // 生成一个随机数
    const randomNum = (min: number, max: number) => {
        return Math.floor(Math.random() * (max - min) + min)
    }
    // 生成一个随机的颜色
    const randomColor = (min: number, max: number) => {
        const r = randomNum(min, max)
        const g = randomNum(min, max)
        const b = randomNum(min, max)
        return 'rgb(' + r + ',' + g + ',' + b + ')'
    }
    //canvas图片刷新
    const initCode = () => {
        const len = 4
        const codeList: [] = []
        const chars: string = 'ABCDEFGHJKMNPQRSTWXYZabcdefhijkmnprstwxyz0123456789'
        const charsLen: number = chars.length
        for (let i = 0; i < len; i++) {
            codeList.push(chars.charAt(Math.floor(Math.random() * charsLen)))
        }
        const identifyCode = codeList.join('')
        console.log(identifyCode)
        form.sureCode = identifyCode
        //绘制图片
        const canvas: HTMLElement | null | any = document.getElementById('cancasCode')
        //画布
        const ctx = canvas.getContext('2d')
        ctx.textBaseline = 'bottom'
        //随机背景色
        ctx.fillStyle = randomColor(0, 255)
        //绘制矩形的长框(
        //    x矩形左上角的 x 坐标。
        //    y矩形左上角的 y 坐标。
        //    width矩形的宽度,以像素计。
        //    height矩形的高度,以像素计。
        //   )
        ctx.fillRect(0, 0, 100, 40)
        //绘制文字
        for (let i = 0; i < identifyCode.length; i++) {
            //文字颜色
            ctx.fillStyle = randomColor(0, 255)
            // 文字大小
            ctx.font = randomNum(12, 30) + 'px SimHei'
            const x = (i + 1) * (100 / (identifyCode.length + 1))
            const y = randomNum(30, 35)
            var deg = randomNum(-45, 45)
            //修改坐标原点与角度
            ctx.translate(x, y)
            ctx.rotate(deg * (Math.PI / 180))
            ctx.fillText(identifyCode[i], 0, 0)
            //恢复坐标原点
            ctx.rotate(-deg * (Math.PI / 180))
            ctx.translate(-x, -y)
        }
    }

以上就是视频直播源码,前端canvas动态验证码实现, 更多内容欢迎关注之后的文章

 

标签:canvas,const,min,ctx,验证码,randomNum,源码,Math
From: https://www.cnblogs.com/yunbaomengnan/p/17203206.html

相关文章

  • 一行一行源码分析清楚 AbstractQueuedSynchronizer(二)
    文章比较长,信息量比较大,建议在pc上阅读。文章标题是为了呼应前文,其实可以单独成文的,主要是希望读者看文章能系统看。本文关注以下几点内容:深入理解ReentrantLock公......
  • 多渠道兑换系统源码
    该多渠道兑换系统源码源码采用前后端分离模式开发,前端使用Vue+Element 后端采用Asp.netCore 可扩展对接任意支付,支持网关下发,Web通信下发,Sql下发等方式  ......
  • centos stream9 源码安装 amule 2.3.3
    下载amule源码cdaMule-2.3.3mkdirbuild-kuncdbuild-kun../configure缺少依赖zlibsudodnfinstallzlib-devel重复执行../configure缺少wxwidgets从源代码......
  • 【Mybatis】【插件】Mybatis源码解析-插件机制
    1 前言这节我们来看看插件,插件是来干啥的呢?一般情况下,开源框架都会提供插件或其他形式的拓展点,供开发者自行拓展。这样的好处是显而易见的,一是增加了框架的灵活性。二......
  • React Hooks源码深度解析
    作者:京东零售郑炳懿前言ReactHooks是React16.8引入的一个新特性,它允许函数组件中使用state和其他React特性,而不必使用类组件。Hooks是一个非常重要的概念,因为它们提......
  • React Hooks源码深度解析
    作者:京东零售郑炳懿前言​​ReactHooks​​是​​React​​16.8引入的一个新特性,它允许函数组件中使用​​state​​和其他React特性,而不必使用类组件。​​Hooks​​......
  • 随堂笔记13-spring之aop底层源码
    动态代理:代理模式:为其他对象提供一种代理来控制对这个对象的访问,增强一个类中的某个方法,对其进行扩展调用分为俩类,一类是jdk的接口代理,需要有接口,另一种是cglib代......
  • 手把手教你使用LabVIEW OpenCV DNN实现手写数字识别(含源码)
    (文章目录)前言今天和大家一起来看一下在LabVIEW中如何使用OpenCVDNN模块实现手写数字识别一、OpenCVDNN模块1.OpenCVDNN简介OpenCV中的DNN(DeepNeuralNetworkmod......
  • 基于JSP+javaBean的留言板--改进(附源码)
    一、系统的主要功能和特点系统主要实现了以JSP和JavaBean为基础的留言板。主要包括登录、登陆检查、增加留言、查看全部留言信息、查看指定留言信息等功能实现了数据的读......
  • percona-server-8.0.25-15源码编译安装
    ###############################     初始化:mysqld--initialize#mysqld--initialize--user=work--basedir=/home/work/mysql_3306--datadir=/home/wo......