当前位置: 首页 > news >正文

vue2 搭配 html2canvas 截图并设置截图时样式(不影响页面) 以及 base64转file文件上传 或者下载截图 小记

下载

npm install html2canvas --save

引入

import html2canvas from "html2canvas";

 

//使用

html2canvasForChars() {  // 使用that来存储当前Vue组件的上下文,以便在回调函数中使用  let that = this;  // 获取DOM中id为"charts"的元素,需要截图的元素  let node = document.getElementById("charts");  // 返回一个Promise对象,用于异步处理html2canvas的调用  return new Promise((resolve, reject) => {  // 使用Vue的$nextTick方法确保DOM更新完成后再执行html2canvas  that.$nextTick(() => {  // 调用html2canvas函数,传入node元素和相关配置  html2canvas(node, {  useCORS: true, // 允许跨域图片  // 以下两行被注释,因为它们被固定尺寸替代  // height: node.offsetHeight, // 自动获取高度(现在使用固定高度)  // width: node.offsetWidth, // 自动获取宽度(现在使用固定宽度)//scale: 2.82, // 缩放比例 这个数值根据具体需求调整width: 270, // 设置canvas的宽度为270    画布的宽度height: 200, // 设置canvas的高度为200   画布的高度scrollY: 0, // 忽略Y轴滚动  scrollX: 0, // 忽略X轴滚动  onclone: function (documentClone) {  // 在html2canvas克隆的DOM上修改样式  // 对克隆的#charts元素应用缩放和背景色 //在此设置样式 不影响页面 documentClone.getElementById("charts").style.transform = "scale(0.5)";  documentClone.getElementById("charts").style.backgroundColor = "#2c2c32";},  })  // html2canvas执行成功后的回调   在此可实现 下载 或其他操作.then((canvas) => {  //下载//link.setAttribute('download', '分享海报') // 设置下载名称//link.href = canvas?.toDataURL('image/png', 1) // 转换为png格式//link.click()//展示// 将canvas转换为png格式的图片URL  let imgUrl = canvas.toDataURL("image/png");  that.Thumbnail = imgUrl;  //现在已经可以展示到页面上了})  // html2canvas执行失败的回调  .catch((err) => {  // 捕获错误并拒绝Promise  reject(err); // 处理生成 canvas 失败的情况  });  });  });  
},

上面显示了展示和下载的方法 展示的话一般是搭配上传(将当前截图上传到服务器) 但是后端规定的上传格式如何不是base64的话 我们需要转化成file对象 创建formdata 对象上传

1. base64z转 file文件

  // 生成随机数 这一步是避免傻逼后端直接用我们规定的文件名缓存 到时候会有重名的文件generateRandomString(length) {// 定义允许的字符集const characters = "abcdefghijkmnopqrstuvwxyz23456789"; // 去除容易混淆的字符let result = "";const charactersLength = characters.length;for (let i = 0; i < length; i++) {result += characters.charAt(Math.floor(Math.random() * charactersLength));}return result;}, // base64转化为file文件base64ToFile(dataurl) {// 随机数作为图片名称let radom = this.generateRandomString(16);let filename = radom + ".png";// 获取到base64编码const arr = dataurl.split(",");// 将base64编码转为字符串const bstr = window.atob(arr[1]);let n = bstr.length;const u8arr = new Uint8Array(n); // 创建初始化为0的,包含length个元素的无符号整型数组while (n--) {u8arr[n] = bstr.charCodeAt(n);}return new File([u8arr], filename, {type: "image/png",});},//使用// 上传缩略图图片uploadScreenshot(path) {let that = this;return new Promise((resolve, reject) => {if (path != null) {
//转换let file = that.base64ToFile(path);let data = new FormData();data.append("imageFile", file);that.axios.post(window.global.uploadAddress + "/file/upload/image?type=" + "grid", data, {headers: {"Content-Type": "application/json",},})........

好了 下课

http://www.lryc.cn/news/411418.html

相关文章:

  • 请大家监督:我要开启Python之路,首要任务最简单的搭建环境
  • http协议深度解析——网络时代的安全与效率(1)
  • 类和对象【下】
  • 面向未来的S2B2C电商供应链系统发展趋势与创新探索
  • 【C++】哈希容器
  • milvus - VectorDBBench benchmaker 性能测试工具使用经验
  • Linux上如何分析进程内存分配,优化进程内存占用大小
  • C语言笔记(第n版):知识清单
  • 【香橙派系列教程】(四)基于ARM-Linux架构的语音控制刷抖音项目
  • Java----反射
  • 相似度计算方法
  • Vue 点击markdown页内链接,路由设置不跳转
  • IOday4
  • 智能座舱背后主流车机平台(SA8155/SA8295)的高通Hexagon DSP是什么?
  • linux进程控制——进程等待——wait、waitpid
  • Shell脚本的进程管理
  • JLink烧录失败
  • Monorepo简介
  • SpringBoot打包为jar包,打包前注意事项及打包教程
  • B端系统UI个性化设计:感受定制之美
  • 前端常用 utils 工具封装
  • 项目都做完了,领导要求国际化????--JAVA后端篇
  • 国内备受好评PostgreSQL数据库性能如何?
  • 彻底搞懂前端跨域解决方案
  • Kafka基础概念
  • 【论文阅读笔记】DeepCAD: A Deep Generative Network for Computer-Aided Design Models
  • 《如鸢》开通官号,女性向游戏爆款预定
  • OpenAI再下一城:发布Voice Engine,可使用文本和参考语音合成说话者的新语音!
  • KVM高级功能部署
  • 【C语言】柔性数组(打开前所未见的大门)