横屏签字板手写签名并旋转90°转为横屏显示base64

news2025/7/10 10:22:55

手写签名并旋转90°转为横屏显示base64

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

base64

data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAApsAAAF3CAYAAADq/IAAAAAAAXNSR0IArs4c6QAAIABJREFUeF7t3W3MPlldH/CvwLK7wEKNoiABZLvYiBqIdJGnQlor9gVBaAtJmzQsoI2wgKD4hqVNmrD7ohWhPFRSIg++aKO0XTS8AVLb4AIVtFnaSiMPSktxoyVVWFxAFmwOzCwXF/d9/6+5rjkzc2Y+V/LPfwkz55z5/M593d//PJz5tvgQIECAAAECBAgQqCTwbZXa1SwBAgQIECBAgACBCJsmAQECBAgQIECAQDUBYbMarYYJECBAgAABAgSETXOAAAECBAgQIECgmoCwWY1WwwQIECBAgAABAsKmOUCAAAECBAgQIFBNQNisRqthAgQIECBAgAABYdMcIECAAAECBAgQqCYgbFaj1TABAgQIECBAgICwaQ4QIECAAAECBAhUExA2q9FqmAABAgQIECBAQNg0BwgQIECAAAECBKoJCJvVaDVMgAABAgQIECAgbJoDBAgQIECAAAEC1QSEzWq0GiZAgAABAgQIEBA2zQECBAgQIECAAIFqAsJmNVoNEyBAgAABAgQICJvmAAECBAgQIECAQDUBYbMarYYJECBAgAABAgSETXOAAAECBAgQIECgmoCwWY1WwwQIECBAgAABAsKmOUCAAAECBAgQIFBNQNisRqthAgQIECBAgAABYdMcIECAAAECBAgQqCYgbFaj1TABAgQIECBAgICwaQ4QIECAAAECBAhUExA2q9FqmAABAgQIECBAQNg0BwgQIECAAAECBKoJCJvVaDVMgAABAgQIECAgbJoDBAgQIECAAAEC1QSEzWq0GiZAgAABAgQIEBA2zQECBAgQIECAAIFqAsJmNVoNEyBAgAABAgQICJvmAAECBAgQIECAQDUBYbMarYYJECBAgAABAgSETXOAAAECBAgQIECgmoCwWY1WwwQIECBAgAABAsKmOUCAAAECBAgQIFBNQNisRqthAgQIECBAgAABYdMcIECAAAECBAgQqCYgbFaj1TABAgQIECBAgICwaQ4QIECAAAECBAhUExA2q9FqmAABAgQIECBAQNg0BwgQIECAAAECBKoJCJvVaDVMgAABAgQIECAgbJoDBAgQIECAAAEC1QSEzWq0GiZAgAABAgQIEBA2zQECBAgQIECAAIFqAsJmNVoNEyBAgAABAgQICJvmAAECBAgQIECAQDUBYbMarYYJECBAgAABAgSETXOAAAECBAgQIECgmoCwWY1WwwQIECBAgAABAsKmOUCAAAECBAgQIFBNQNisRqthAgQIECBAgAABYdMcIECAAAECBAgQqCYgbFaj1TABAgQIECBAgICwaQ4QIECAAAECBAhUExA2q9FqmAABAgQIECBAQNg0BwgQIECAAAECBKoJCJvVaDVMgAABAgQIECAgbJoDBAgQIECAAAEC1QSEzWq0GiZAgAABAgQIEBA2zQECBAgQIECAAIFqAsJmNVoNEyBAgAABAgQICJvmAAECBAgQIECAQDUBYbMarYYJECBAgAABAgSETXOAAAECBAgQIECgmoCwWY1WwwQIECBAgAABAsKmOUCAAAECBAgQIFBNQNisRqthAgQIECBAgAABYdMcIECAAAECBAgQqCYgbFaj1TABAgQIECBAgICwaQ4QIECAAAECBAhUExA2q9FqmAABAgQIECBAQNg0BwgQIECAAAECBKoJCJvVaDVMgAABAgQIECAgbJoDBAgQIECAAAEC1QSEzWq0GiZAgAABAgQIEBA2zQECBAgQIECAAIFqAsJmNVoNEyBAgAABAgQICJvmAAECBAgQIECAQDUBYbMarYYJECBAgAABAgSETXOAAAECBAgQIECgmoCwWY0290hyXZLXJbnigm6+mOQ1SX41ya31hqNlAgQIECBAgMD0AsLmuOafT3LvE5u8I8m1ST5yYjt2J0CAAAECBAjMLiBsnlaCK5P8SJLHJnlckqftNVfOWr4oyduSfPmcrn44ybOS/MzOGdA7k7wyyY1Jyn/7ECBAgAABAgSaFBA2h5Xt6iSP74JlCZePTHK3vSZuT3LfYc3etXW59H5DklckX7sM/9kk35/ktiPbsxsBAgQIECBAYFYBYfNw/v+c5Ml7m381yX9L8oHuz/uTfOLwJs/d8lFJbukuyZezo492WX0E1a838cGupceM1qKGCBAgQIAAgXMFhM3DJ8dvJnlEF1b+Sxcuy99fOLyJQVs+IMnvd2dJXVYfRHfhxn/Z/b/m/nimWiJAgAABAsJmo3Pgsu6yerm07rL6OEUUNsdx1AoBAgQIEDhIwNmdg5hm32j3sno5k/pdScqT7z7DBYTN4Wb2IECAAAECRwsIm0fTTb5juaz+qe4MZznTedPkI1hHh8Lm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

vue

<!--
 * @Author: zhouyx
 * @Date: 2023-11-01 13:40:42
 * @LastEditTime: 2023-11-01 14:29:08
 * @LastEditors: zhouyx
 * @FilePath: \温州h5\src\views\cardApplication\canvasSign.vue
 * @程序猿: 佛祖保佑     永不宕机     永无BUG
-->
<template>
  <div class="signature">
    <canvas ref="canvas" class="canvas" placeholder="请签名"></canvas>
    <div class="btn-group flex flex-wrap flex-acenter">
      <button class="clear" @click="clear">重写</button>
      <button class="save" @click="save">确认</button>
    </div>
  </div>
</template>

<script>
  export default {
    data() {
      return {
        canvas: null,
        ctx: null,
        drawing: false,
        lastX: null,
        lastY: null,
        lineWidth: 2,
      }
    },
    mounted() {
      this.canvas = this.$refs.canvas
      this.ctx = this.canvas.getContext('2d')
      this.canvas.width = window.innerWidth
      this.canvas.height = window.innerHeight
      this.ctx.strokeStyle = '#000000'
      this.ctx.lineWidth = this.lineWidth
      this.ctx.lineJoin = 'round'
      this.ctx.lineCap = 'round'

      this.canvas.addEventListener('touchstart', this.startDrawing)
      this.canvas.addEventListener('touchmove', this.draw)
      this.canvas.addEventListener('touchend', this.stopDrawing)
    },
    methods: {
      startDrawing(e) {
        this.drawing = true
        this.lastX = e.touches[0].clientX
        this.lastY = e.touches[0].clientY
      },
      draw(e) {
        if (!this.drawing) return
        const x = e.touches[0].clientX
        const y = e.touches[0].clientY
        this.ctx.beginPath()
        this.ctx.moveTo(this.lastX, this.lastY)
        this.ctx.lineTo(x, y)
        this.ctx.stroke()
        this.lastX = x
        this.lastY = y
      },
      stopDrawing() {
        this.drawing = false
      },
      save() {
        const canvas = document.createElement('canvas')
        const ctx = canvas.getContext('2d')
        const img = new Image()
        img.src = this.canvas.toDataURL()
        img.onload = () => {
          canvas.width = img.height
          canvas.height = img.width
          ctx.translate(canvas.width / 2, canvas.height / 2)
          ctx.rotate((-90 * Math.PI) / 180)
          ctx.drawImage(img, -img.width / 2, -img.height / 2)
          const dataURL = canvas.toDataURL()
          console.log(dataURL)
        }
      },
      clear() {
        this.ctx.clearRect(0, 0, this.canvas.width, this.canvas.height)
      },
    },
  }
</script>

<style scoped lang="scss">
  .signature {
    position: fixed;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
    background-color: #ffffff;
  }

  .canvas {
    width: 100%;
    height: 100%;
  }

  .btns {
    position: absolute;
    bottom: 20px;
    left: 50%;
    transform: translateX(-50%);
  }
  .btn-group {
    position: absolute;
    top: 0;
    left: 0;
    width: 1.6rem;
    height: 100%;
    z-index: 9;
    transform: translate(-10%, 25%);
    button {
      width: 160px;
      height: 72px;
      background: rgba(255, 255, 255, 1);
      border-radius: 6px;
      font-size: 28px;
      color: #333;
      transform: rotate(90deg);
    }
    button.clear {
      margin-top: 2rem;
      border: 1px solid rgba(50, 190, 218, 1);
      color: #32beda;
    }
    button.save {
      margin-top: 2rem;
      background: rgba(50, 190, 218, 1);
      border: 1px solid rgba(50, 190, 218, 1);
      color: #fff;
    }
  }
</style>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1158104.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ios开发者(Apple Developer Program)如何续费

前言 会员资格到期之日前 30 天才可以进行续费 1. 联系官方 查询续费方式与入口 官网地址&#xff1a;https://developer.apple.com/ 2. Apple Developer App 进行续订 需要下载 Apple Developer 进入App内进行续订。 3. 如果没有续订按钮&#xff0c;联系官方更换订阅…

RTSP/Onvif安防视频平台EasyNVR接入EasyNVS,出现Login error报错的解决方法

安防视频监控汇聚EasyNVR平台&#xff0c;是基于RTSP/Onvif协议的安防视频平台&#xff0c;可支持将接入的视频流进行全平台、全终端分发&#xff0c;分发的视频流包括RTSP、RTMP、HTTP-FLV、WS-FLV、HLS、WebRTC等格式。为了满足用户的集成与二次开发需求&#xff0c;我们也提…

厦门万宾科技智能井盖监测仪器的作用如何?

越来越多的人们希望改善生活&#xff0c;走出农村走出大山&#xff0c;前往城市之中居住。由此城市的人口和车辆在不断增加&#xff0c;与之而来的是城市的交通压力越来越大&#xff0c;时常会出现道路安全隐患&#xff0c;这给城市未来发展和智慧城市建设都带来一定的难题&…

vue详细安装教程

这里写目录标题 一、下载和安装node二、创建全局安装目录和缓存日志目录三、安装vue四、创建一个应用程序五、3x版本创建六、创建一个案例 一、下载和安装node 官网下载地址&#xff1a;https://nodejs.org/en/download 选择适合自己的版本&#xff0c;推荐LTS&#xff0c;长久…

模块化机柜PDU为数据中心机房末端配电提供可靠解决方案

数据中心是国家确定的“新基建”七大领域之一&#xff0c;数据中心在国民经济和社会发展中所起的作用越来越重要&#xff0c;数据中心已经成为了各行各业的关键基础设施&#xff0c;数据中心供配电系统相当于一个人的“心脏和血管”&#xff0c;负责把能量输送到系统的每一台设…

驱动开发11-1 编写IIC驱动-读取温湿度数据

头文件 head.h #ifndef __HEAD_H__ #define __HEAD_H__ #define GET_HUM _IOR(m, 1, int) #define GET_TEM _IOR(m, 0, int) #endif 应用程序 si7006.c #include <stdlib.h> #include <stdio.h> #include <sys/types.h> #include <sys/stat.h> #inc…

人人都能看懂的DDPM反向降噪过程公式推导

0 前言 上一篇介绍了前向加噪过程&#xff0c;得到如下从 x 0 x_0 x0​ 一步到 x t x_t xt​ 过程&#xff1a; α t β t 1 \alpha_t \beta_t1 αt​βt​1&#xff0c;其中 β t \beta_t βt​ 是正态分布方差&#xff0c;即第 t t t 步产生的噪声从 N ( 0 , β t ) …

伽马函数 简要总结

1、定义公式&#xff1a; &#xff08;上面一个△ 意为“定义为”&#xff09; 例1&#xff1a; 例2&#xff1a; 2、性质 3、举例 例1&#xff1a; 例2&#xff1a; 例3&#xff1a; 笔记记录时间&#xff1a;2023.11.01&#xff0c;笔记记录自汤老师讲解的伽马函数内容。…

算法与数据结构-回溯算法

文章目录 如何理解“回溯算法”&#xff1f;两个回溯算法的经典应用0-1 背包正则表达式 如何理解“回溯算法”&#xff1f; 笼统地讲&#xff0c;回溯算法很多时候都应用在“搜索”这类问题上。不过这里说的搜索&#xff0c;并不是狭义的指我们前面讲过的图的搜索算法&#xf…

损失函数总结(十一):Huber Loss、SmoothL1Loss

损失函数总结&#xff08;十一&#xff09;&#xff1a;Huber Loss、SmoothL1Loss 1 引言2 损失函数2.1 Huber Loss2.2 SmoothL1Loss 3 总结 1 引言 在前面的文章中已经介绍了介绍了一系列损失函数 (L1Loss、MSELoss、BCELoss、CrossEntropyLoss、NLLLoss、CTCLoss、PoissonNL…

c语言基础:L1-067 洛希极限

科幻电影《流浪地球》中一个重要的情节是地球距离木星太近时&#xff0c;大气开始被木星吸走&#xff0c;而随着不断接近地木“刚体洛希极限”&#xff0c;地球面临被彻底撕碎的危险。但实际上&#xff0c;这个计算是错误的。 洛希极限&#xff08;Roche limit&#xff09;是一…

01-开发第一个Vue程序,了解Vue构造函数的配置项data,template,插值语法,el

Vue的快速入门 下载并安装vue.js Vue是一个基于JavaScript实现的框架, 要使用它就需要从Vue官网下载 vue.js文件 第一步&#xff1a;打开Vue2官网&#xff0c;点击下图所示的起步 第二步&#xff1a;继续点击下图所示的安装 第三步&#xff1a;在安装页面向下滚动&#xff0…

永恒之蓝(MS17-010)漏洞利用

永恒之蓝&#xff08;eternalblue) 永恒之蓝&#xff08;Eternal Blue&#xff09;爆发于2017年4月14日晚&#xff0c;是一种利用Windows系统的SMB协议漏洞来获取系统的最高权限&#xff0c;以此来控制被入侵的计算机。甚至于2017年5月12日&#xff0c; 不法分子通过改造“永恒…

k8s约束调度

Kubernetes 是通过 List-Watch **** 的机制进行每个组件的协作&#xff0c;保持数据同步的&#xff0c;每个组件之间的设计实现了解耦。 list-watch核心组件为Controller Manager、Scheduler 和 kubelet&#xff0c;这三者协助完成了pod节点的建立过程。 在 Kubernetes 中&…

89 柱状图中最大的矩形

柱状图中最大的矩形 类似接雨水&#xff08;反过来&#xff0c;相当于找接雨水最少的一段&#xff09;题解1 暴力搜索&#xff08;超时&#xff09; O ( N 2 ) O(N^2) O(N2)另一种 题解2 单调栈【重点学习】常数优化 给定 n 个非负整数&#xff0c;用来表示柱状图中各个柱子的…

【接口测试】目前市面上流行的接口大多有哪几种协议的接口?

首先&#xff0c;关于协议这个词&#xff0c;你要清楚。 接口测试它是基于什么进行测试的&#xff0c;接口测试是什么测试类型&#xff0c;其实有有时候问到一个问题&#xff0c;关联性很强。很多关联性的问题你都可以去考虑。 首先接口测试一个功能黑盒测试&后端&#x…

Snackbar使用介绍及自定义

Snackbar使用介绍及自定义 前言一、Snackbar是什么&#xff1f;二、简单使用三、进阶使用参考 [Android 快别用Toast了&#xff0c;来试试Snackbar](https://blog.csdn.net/g984160547/article/details/121269520) 总结 前言 有个UI要显示自定义样式的toast&#xff0c;并居中…

APISpace 天气预报查询API接口案例代码

1.天气预报查询API产品介绍 APISpace 的 天气预报查询&#xff0c;支持全国以及全球多个城市的天气查询&#xff0c;包含国内3400个城市以及国际4万个城市的实况数据&#xff0c;同时也支持全球任意经纬度查询&#xff0c;接口会返回该经纬度最近的站点信息&#xff1b;更新频率…

【JavaScript】jQuery 使用案例

使用JS实现猜数字游戏 原生JS版&#xff1a; <!DOCTYPE html> <html lang"cn"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Docum…

视频编码转换技巧:视频批量转码H264转H265,高效且顺畅

随着数字媒体的广泛应用&#xff0c;视频编码转换已成为一种普遍的需求。不同的视频格式和编码标准使得在不同设备上播放视频成为可能&#xff0c;同时也带来了兼容性和传输效率的问题。本文讲解引用云炫AI智剪使视频编码转换技巧&#xff0c;即批量将H264编码转换为H265编码&a…