canvas签字+html2canvas将dom保存为图片避坑指南

1. 前言

如果你需要h5签字,并需要将相关dom保存成图片,那你算是 掏上了😂 这是一篇全方位避坑指南。至少可以给你节省 8小时。

技术栈: vue2.x js 一定要先看技术栈哦,避免出现未知ERROR

canvas 签字自己去实现其实也没啥难度,有更好的插件,可以帮助我们多争取一点摸鱼时间,那何尝不可呐。

之前也写过一篇小程序签字保存图片,您可以点击查看👉👉👉 微信小程序 canvas 签字连笔卡顿 如何解决

2. 使用的插件

js 复制代码
npm i  [email protected]
npm i  [email protected]

说到这,我不得不夸一下 vue-esign 好用、非常好用👍 ,我需要的功能都做了配置,你们可以感受下demo,看看是不是符合你的需求再决定是否向下看,点击查看

3. 签字组件的使用

js 复制代码
 <vue-esign 
     ref="esign" 
     class="mySign" 
     :height="300" 
     :isCrop="isCrop" 
     :lineWidth="lineWidth" 
     :lineColor="lineColor" 
     :bgColor="bgColor" 
     :isClearBgColor="false"
 />
// 重置事件
handleReset() {
    this.$refs.esign.reset()
}
// 校验是否签字
openLink() {
    try {
        // 生成签名结果
        const res = await this.$refs.esign.generate()
        console.log('res')
        // 处理其他业务逻辑
     }catch (error) {
        console.log('err', error)
        Toast('请先签名')
    }
}

简单吧,他把签字的动作都封装了,代码看着非常清爽。感谢大佬,如果你需要看其它的配置请看这个

ok到这 canvas签字就结束了,非常好用,接下来就说说 html2canvas将dom保存为图片的坑

4. html2canvas的使用

js 复制代码
 <div class="confirm_content_clone" ref="htmlContent">
      <img style="width: 100%; height: 100%;"  :src="filePath" alt="" />
      <img style="width: 100%; height: 150px;" :src="resultImg" alt="" />
 </div>
 
 async openLink() { 
     // 别问直接把这些属性,放上
     const newCanvas = await html2canvas(this.$refs.htmlContent, {
        useCORS: true, // 处理跨域资源
        scale: 2, // 提高截图清晰度
        allowTaint: true,
        scale: 2, //按比例增加分辨率 (2=双倍).
        dpi: window.devicePixelRatio * 2, //设备像素
    })
    const imgData = newCanvas.toDataURL('image/png')
}

正常情况,那就是把类名为 confirm_content_clone的div 里面的两个图片,生成同一个拼接图片,不正常情况, 那恭喜你,我们开始走上了填坑之路

5. 坑one

图片不全,如下图所示

其实这里并没有太为难我, 我的处理方式是:页面展示是正常一套逻辑 ,需要生成的图片dom, 我采用绝对定位,使用 top:10000 让其消失在可视范围内 ,野蛮是野蛮了一点, 毕竟我和代码 有一个能跑就行

在以为解决的时候(开心鼓掌),你不知道的是,第二个坑向你迎面走来,在ios系统中,图片空白

6. 坑Two

第一个img 的src是一个图片url, 第二个src 图片是 base64格式, 在ios系统中截图如下图所示

也就是图片是url不是base64 在ios系统中 无法显示,这个比较坑的是,pc浏览器中正常显示,也就是开发的时候好好的 ,为啥到了你那就不行了,是不是你手机有问题 🤣

必坑指南第二式: 敲黑板,认真看,要不然够你找的 crossOrigin="anonymous"

js 复制代码
// 添加  crossOrigin="anonymous" 
 <img  
     crossOrigin="anonymous" 
     style="width: 100%; height: 100%;" 
     src=""
     alt=""
 />

看,只要抵住最黑的暗,就能收获最光的亮

6. 坑Three

这个坑的现象是在ios系统的,涉及中文符号的时候,保存的图片 换行错乱,而且莫名其妙靠右: 如下图所示

其实这个解决方案已经在上面了,就是在浏览中,样式是正确的 如下图所示

终极一招: 先生成一张正确的图片,然后用图片替代文字,即可。是不是 脑回路清奇,好了 就这吧。

**野蛮的人生不需要解释, 下次见。 **

相关推荐
前端小巷子1 分钟前
CSS伪类选择器大全:提升网页交互与样式的神奇工具
前端
前端涂涂2 分钟前
Node.js 的定义、用途、安装方法
前端
前端涂涂3 分钟前
Node.js 中的 Buffer(缓冲区)
前端
寒雪谷9 分钟前
用户登陆UI
开发语言·javascript·ui·harmonyos·鸿蒙
糖墨夕12 分钟前
【2】Three.js-创建3D场景
前端·webgl·three.js
三原16 分钟前
什么是微应用?我需不需要使用微应用?
前端·架构·设计
三原20 分钟前
前端微应用-乾坤(qiankun)原理分析-single-spa
前端·架构·设计
布兰妮甜28 分钟前
Angular 框架详解:从入门到进阶
前端·javascript·前端框架·angular.js
独立开阀者_FwtCoder38 分钟前
做Docx预览,一定要做这个神库!!
前端·javascript·面试
独立开阀者_FwtCoder40 分钟前
搞定 XLSX 预览?别瞎找了,这几个库(尤其最后一个)真香!
前端·javascript·面试