vue-esign签字板,鼠标写名,支持PC\移动端,返回base64或者file格式的文件流vue vue-esign签字插件

news2024/11/21 1:26:18

开源地址:

示例DEMO

vue里实现鼠标签名,支持PC\移动端,返回base64或者file格式的文件流

1 、安装插件 vue-esign


npm install vue-esign --save

 2、在main.js引用


import vueEsign from 'vue-esign'
Vue.use(vueEsign)

3、页面中使用


<template>
  <div>
    <el-card class="box-card">
      
      <div class="text item">
        <img :src="resultImg" class="show-img" v-if="resultImg != ''">
        <div class="show-info" v-else>请在下方书写电子签名</div>
      </div>
    </el-card>
    <el-card class="qianming-container" body-style="padding:0px">
      <vue-esign ref="esign" :isCrop="isCrop" :width="600" :height="300" :lineWidth="lineWidth" :lineColor="lineColor" :bgColor.sync="bgColor"></vue-esign>
      <div class="contro-container">
        <el-button type="danger" @click="handleReset">清空画板</el-button>
        <el-button type="primary" @click="handleGenerate">生成图片</el-button>
      </div>
    </el-card>
	
  </div>
</template>

<script>
export default {
  name: '',
  data() {
    return {
      lineWidth: 6,
      lineColor: '#000000',
      bgColor: '',
      resultImg: '',
	  isCrop: false,
	  ccc:''
    }
  },
  methods: {
    //清空画板..
    handleReset() {
      this.$refs.esign.reset();
      this.resultImg = ''
	},
	// 生成照片
    handleGenerate() {
	  var _this = this;
	  this.$refs.esign.generate().then(res => {
		this.resultImg = res;       
        let randnum = Math.random() * 10000000000000
        randnum = Math.floor(randnum)
        let fileName = "dianziqianming/" + randnum + '.png'
        let file = this.dataURLtoFile(res, fileName)
		console.log(file, "file")
        // 调接口
      }).catch(err => {
        console.log(err)
        this.$message.error('请签名之后提交!')
      }) 
	},
	//将base64转换为文件..
    dataURLtoFile(dataurl, filename) {
      var arr = dataurl.split(','), mime = arr[0].match(/:(.*?);/)[1],
        bstr = atob(arr[1]), n = bstr.length, u8arr = new Uint8Array(n);
      while (n--) {
        u8arr[n] = bstr.charCodeAt(n);
      }
      return new File([u8arr], filename, { type: mime });
    }
  }
}
</script>

<style scoped>
button {
  height: 40px;
}

.show-img {
  width: 400px;
  height: 200px;
  border: 1px solid #123456;
}

.show-info {
  width: 400px;
  height: 200px;
  font-size: 24px;
  display: flex;
  align-items: center;
  justify-content: center;
}

.contro-container {
  width: 600px;
  height: 50px;
  display: flex;
  flex-direction: row;
  align-items: center;
  justify-content: space-around;
  background-color: #D3D3D3;
  position: absolute;
  bottom: 0px;
}

.qianming-container {
  width: 600px;
  height: 350px;
  margin: 20px auto;
  position: relative;
}

.text {
  font-size: 14px;
}

.item {
  margin-bottom: 18px;
}

.clearfix:before,
.clearfix:after {
  display: table;
  content: "";
}

.clearfix:after {
  clear: both
}

.box-card {
  width: 95%;
  margin-left: 2.5%;
  margin-top: 20px;
}
</style>


github

时隔三年的更新!!支持vue3

  • 支持vue3!!!!更新依赖后,仅bgColor原来的.sync修饰符需改为vue3写法v-model:bgColor;
  • 新增属性 isClearBgColor,默认值true, 清空画布时(reset)是否同时清空设置的背景色(bgColor) ;
  • 直接npm install vue-esign@latest --save即可,对vue2版本无任何影响;

功能

  1. 兼容 PC 和 Mobile;
  2. 画布自适应屏幕大小变化(窗口缩放、屏幕旋转时画布无需重置,自动校正坐标);
  3. 自定义画布尺寸(导出图尺寸),画笔粗细、颜色,画布背景色;
  4. 支持裁剪 (针对需求:有的签字需要裁剪掉四周空白)。
  5. 导出图片格式为 base64
  6. 示例demo

安装

npm install vue-esign --save

使用

  1. 全局使用 、局部
// 全局 vue2 main.js
import vueEsign from 'vue-esign'
Vue.use(vueEsign)
// 全局vue3 main.js
import { createApp } from 'vue'
import App from './App.vue'
import vueEsign from 'vue-esign'
const app = createApp(App)
app.use(vueEsign)
// 局部
import vueEsign from 'vue-esign'
components: { vueEsign }
  1. 页面中使用 必须设置 ref ,用来调用组件的两个内置方法 reset() 和 generate()

无需给组件设置 style 的宽高,如果画布的 width属性值没超出父元素的样式宽度,则该组件的样式宽度就是画布宽度,超出的话,组件样式宽度则是父元素的100%; 所以只需设置好父元素的宽度即可;

<!-- vue2 -->
<vue-esign ref="esign" :width="800" :height="300" :isCrop="isCrop" :lineWidth="lineWidth" :lineColor="lineColor" :bgColor.sync="bgColor" />
<!-- vue3 -->
<vue-esign ref="esign" :width="800" :height="300" :isCrop="isCrop" :lineWidth="lineWidth" :lineColor="lineColor" v-model:bgColor="bgColor" />

<!-- isClearBgColor为false时,不必再给bgColor加sync修饰符或v-model -->

<button @click="handleReset">清空画板</button>
<button @click="handleGenerate">生成图片</button>
data () {
  return {
    lineWidth: 6,
    lineColor: '#000000',
    bgColor: '',
    resultImg: '',
    isCrop: false
  }
},
methods: {
  handleReset () {
    this.$refs.esign.reset()
  },
  handleGenerate () {
    this.$refs.esign.generate().then(res => {
      this.resultImg = res
    }).catch(err => {
      alert(err) // 画布没有签字时会执行这里 'Not Signned'
    })
  }
}
  1. 说明
属性类型默认值说明
widthNumber800画布宽度,即导出图片的宽度
heightNumber300画布高度,即导出图片的高度
lineWidth4Number画笔粗细
lineColorString#000000画笔颜色
bgColorString画布背景色,为空时画布背景透明,
支持多种格式 '#ccc','#E5A1A1','rgb(229, 161, 161)','rgba(0,0,0,.6)','red'
isCropBooleanfalse是否裁剪,在画布设定尺寸基础上裁掉四周空白部分
isClearBgColorBooleantrue清空画布时(reset)是否同时清空设置的背景色(bgColor)
formatStringimage/png生成图片格式 image/jpeg(jpg格式下生成的图片透明背景会变黑色请慎用或指定背景色)、 image/webp
qualityNumber1生成图片质量;在指定图片格式为 image/jpeg 或 image/webp的情况下,可以从 0 到 1 的区间内选择图片的质量。如果超出取值范围,将会使用默认值 0.92。其他参数会被忽略。

两个内置方法,通过给组件设置 ref 调用:

清空画布

this.$refs.esign.reset()

生成图片

// 可选配置参数 ,在未设置format或quality属性时可在生成图片时配置 例如: {format:'image/jpeg', quality: 0.5}
// this.$refs.esign.generate({format:'image/jpeg', quality: 0.5})

this.$refs.esign.generate().then(res => {
  console.log(res) // base64图片
}).catch(err => {
  alert(err) // 画布没有签字时会执行这里 'Not Signned'
})

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

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

相关文章

【有奖体验】这个 AI 智能回答,就一个字“绝”!

立即体验基于函数计算部署【文生文】一键部署 ChatYuan 模型&#xff1a; https://developer.aliyun.com/topic/aigc_fc 人工智能生成内容&#xff08;Artificial Intelligence Generated Content&#xff0c;简称 AIGC&#xff09;是当下最火的概念之一。AIGC 被认为是继专业…

iMazing 2.16官方下载使用起来安全吗?

鉴于苹果设备的封闭性与安全性&#xff0c;我们大部分情况下都需要搭配iTunes进行设备的管理。但作为一款全方位的iOS设备管理软件&#xff0c;iMazing竟然可以突破iTunes的限制&#xff0c;与设备直接连接&#xff0c;进行备份、管理等操作。 因此&#xff0c;很多人都会有疑…

Python中怎么清屏

文章目录 一、“Windows命令行窗口”下清屏二、在IDLE下清屏三、后记结语 一、“Windows命令行窗口”下清屏 “Windows命令行窗口”下清屏&#xff0c;可用下面两种方法&#xff1a; 第一种方法&#xff0c;在命令行窗口输入&#xff1a; import os ios.system("cls&qu…

【数据结构】栈和队列(栈篇)

目录 1.栈的概念及结构 2.栈的实现 2.1栈的结构体定义 2.2栈的常用接口函数 &#x1f43e;栈的初始化 &#x1f43e;插入数据 &#x1f43e;删除数据 &#x1f43e;取栈顶元素 &#x1f43e;判断栈是否为空 &#x1f43e;计算栈的大小 &#x1f43e;栈的销毁 2.3完…

【机器学习】基于t-SNE数据可视化工程

一、说明 t-SNE (t-Distributed Stochastic Neighbor Embedding)是一种常用的非线性降维技术。它可以将高维数据映射到一个低维空间(通常是2D或3D)来便于可视化。Scikit-learn API提供TSNE类,以使用T-SNE方法可视化数据。在本教程中,我们将简要学习如何在 Python 中使用 TS…

java投票管理系统小程序

投票管理系统小程序 演示视频 技术&#xff1a; 基于springbootvue小程序的投票管理系统的设计与实现 运行环境&#xff1a; JAVA版本&#xff1a;JDK1.8 IDE类型&#xff1a;IDEA、Eclipse都可运行 微信开发这工具 数据库类型&#xff1a;MySql&#xff08;8.x版本都可&am…

Spark窗口函数的原理

如下几个概念&#xff1a; 批处理时间-每个批次处理数据的时间 窗口时间间隔-窗口长度&#xff0c;是一个抽象的时间概念&#xff0c;可以表示一个窗口下有多少个批次的数据&#xff08;再次封装&#xff09;需要处理&#xff0c;故必须是批处理时间的整数倍 滑动窗口时间间…

从小白到大神之路之学习运维第48天---第三阶段----mysql数据库的主从复制和读写分离

第三阶段基础 时 间&#xff1a;2023年6月28日 参加人&#xff1a;全班人员 内 容&#xff1a; mysql主从复制和读写分离 目录 一、mysql基础 &#xff08;一&#xff09;优点&#xff1a; &#xff08;二&#xff09;类型&#xff1a; &#xff08;三&#xff09;支…

【Spring】— Spring MVC复杂数据绑定

目录 复杂数据绑定1.绑定数组2.绑定集合 复杂数据绑定 实际项目开发中&#xff0c;除了简单数据类型外&#xff0c;还会经常遇到一些比较复杂的数据绑定问题&#xff0c;比如数组的绑定、集合的绑定&#xff0c;接下来将具体讲解一下数组绑定和集合绑定的使用。 1.绑定数组 …

白嫖福利?微软推出免费AI培训计划,助内容创作者实现自动化创作

据《IT之家》报道&#xff0c;微软今日宣布推出一项全新的免费AI培训计划&#xff0c;旨在帮助工作人员快速掌握AI技术的基本概念和应用。通过在线课程和证书&#xff0c;助力内容创作者实现更简单、自动化的内容创作。 作为微软的“技能培训计划”&#xff0c;微软旗下的领英&…

C# async await使用方法

运行界面&#xff1a; 代码部分&#xff1a; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Diagnostics; using System.Drawing; using System.Linq; using System.Text; using System.Threading; using …

基于 VORS、CCDM 模型、GeoDetector、GWR模型集成技术在城镇化与生态系统健康空间关系分析及影响效应中实践应用

城市群是一国经济发展水平的象征&#xff0c;也是一国经济发展到一定阶段的标志&#xff0c;我国城市群建设体量不断增加&#xff0c;将成为全球经济的核心&#xff0c;中国城市群的建设逐步引领全球进入到了21世纪的中国新时代。然而&#xff0c;高速的城镇化发展&#xff0c;…

Diffusion详细学习

解决报错 https://zhuanlan.zhihu.com/p/622238031 原理&#xff1a;https://zhuanlan.zhihu.com/p/612854566 解决内存溢出问题 溢出问题 总结下来&#xff1a;batch_size 和 n_samples 调节 原理学习 扩散模型是一种生成模型&#xff0c;用于生成与训练数据相似的数据。…

Swift 5.9 有哪些新特性(二)

文章目录 前言Noncopyable 结构体和枚举结束变量绑定的生命周期makeStream() 方法添加 sleep(for:) 到 ClockDiscarding task groups总结 前言 虽然 Swift 6 已经在地平线上浮现&#xff0c;但 5.x 版本仍然有很多新功能-更简单的 if 和 switch 用法、宏、非可复制类型、自定义…

(二十四)专题地图编制——制图数据操作

专题地图编制——制图数据操作 目录 专题地图编制——制图数据操作 1.复制地图数据框2.旋转制图数据框3.绘制坐标网格3.1经纬网3.2方里格网3.3参考格网 1.复制地图数据框 要复制地图数据框&#xff0c;请按照以下步骤操作&#xff1a; ①在 ArcMap 中打开地图文档。 ②在“表…

图片怎么转换成PDF格式?学会这些方法轻松转换

将多张图片合并成一个PDF文件&#xff0c;方便用户阅读和管理&#xff0c;避免了多个图片文件的混乱。并且PDF文件可以设置密码保护&#xff0c;避免图片被未经授权的人员查看、复制和编辑。此外&#xff0c;PDF文件可以设置禁止打印和禁止复制等权限&#xff0c;增强图片的安全…

mysql exists深入理解

前言&#xff1a; 某天用exists语句时发现跟我的理解有出入&#xff0c;我以前理解的exists是子查询的结果不会影响最终返回的结果&#xff0c;只要子查询查到有结果&#xff0c;则返回true,没有则返回false。即下面图中的sql&#xff0c;只要house_appraisal不是空表&#xf…

Android中实现Material3主题

Android中实现Material3主题 Material 3是由Google引入的一种设计系统&#xff0c;通过采用一套设计原则、指南和组件&#xff0c;提供统一直观的用户体验。 在本篇文章中&#xff0c;您将学习如何&#xff1a; 在您的Android应用程序中应用Material 3主题。如何使用Materia…

10.1寸工业三防平板应用于工业自动化生产

随着工业自动化的不断发展&#xff0c;工业生产中对于设备的要求也越来越高。在恶劣的工作环境中&#xff0c;工业设备需要具备防尘、防水、防震等功能&#xff0c;以确保设备的稳定运行和长期使用。10.1寸工业三防平板作为一种重要的工业自动化设备&#xff0c;广泛应用于各个…

【算法】算法效率分析 -- 时间空间复杂度

文章目录 概述时间复杂度常数阶 O ( 1 ) O(1) O(1)线性阶 O ( n ) O(n) O(n)对数阶 O ( l o g n ) O(logn) O(logn)线性对数阶 O ( n ∗ l o g n ) O(n*logn) O(n∗logn)次方阶 O ( n 2 ) O(n^2) O(n2) O ( n 3 ) O(n^3) O(n3) O ( n k ) O(n^k) O(nk) O ( n m ) O(nm) …