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

news2025/1/13 3:07:24

下载

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.coloradmin.cn/o/1968627.html

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

相关文章

3.1 拓扑排序

有向图的存储 邻接矩阵 邻接表 拓扑排序 有向无环图&#xff1a;不存在环的有向图 环&#xff1a; 在有向图中&#xff0c;从一个节点出发&#xff0c;最终回到它自身的路径被称为环 入度&#xff1a; 以节点x为终点的有向边的条数被称为x的入度 出度&#xff1a; 以节…

汽车配件销售系统2024

下载在最后,编号ssm007 技术栈: ssmmysqljsp 展示: 下载地址: CSDN现在上传有问题,有兴趣的朋友先收藏.正常了贴上下载地址 备注: 运行有问题请私信我,私信按钮在文章左边) 另外接各种定制系统,java,spring,c,c,python

upload-labs靶场(超详解)1-16关

pass1 从代码中可以看出&#xff0c;是通过js进行文件格式检查 <script type"text/javascript">function checkFile() {var file document.getElementsByName(upload_file)[0].value;if (file null || file "") {alert("请选择要上传的文件…

Nmap/DNS信息收集实验

​实验背景 在安全服务项目中&#xff0c;需要对网络结构进行分析评估&#xff0c;其中风险评估第一步就是信息收集&#xff0c;主要包括活跃主机发现、开放端口号、系统指纹信息等。 实验设备 一个网络 net:cloud0 一台模拟黑客 kali 主机 一台靶机 windows 主机 实验…

go 语言中 init() 函数是什么时候执行的?

文章目录 一、init() 函数什么时候执行&#xff1f;二、init() 函数特点三、代码执行顺序四、多个 init() 函数执行顺序1、一个源文件中多个 init() 函数2、一个包中多个 init() 函数3、多个包中多个 init() 函数&#xff08;不存在依赖&#xff09;4、多个包中多个 init() 函数…

MySQL--数据类型

前言&#xff1a;本博客仅作记录学习使用&#xff0c;部分图片出自网络&#xff0c;如有侵犯您的权益&#xff0c;请联系删除 在MySQL数据库管理系统中&#xff0c;可以通过存储引擎来决定表的类型。同时&#xff0c;MySQL数据库管理系统也提供了数据类型决定表存储数据的类型 …

记录导致计算轮廓面积出错的一个坑点

1.前言 计算轮廓面积是常见的几何算法话题&#xff0c;获取轮廓面积、计算轮廓法线等场景会涉及到。计算轮廓面积的方法有很多&#xff0c;一种常用的是微积分思路的分段求和办法&#xff0c;即组成轮廓的每条线段与X轴或Y轴进行有向投影&#xff0c;轮廓边线与X轴或Y轴的投影之…

【SQL Server】SQL Server基础知识概览

目录 第1章&#xff1a;SQL Server 概览 SQL Server 版本介绍 SQL Server 架构 SQL Server 组件 第1章&#xff1a;SQL Server 概览 SQL Server 版本介绍 SQL Server 是 Microsoft 开发的一款关系型数据库管理系统 (RDBMS)&#xff0c;广泛应用于企业级数据存储和处理场景…

Mysql学习-day15

Mysql学习-day15 1. 行列转换 在MySQL中&#xff0c;行列转换可以通过使用CASE语句结合聚合函数来实现。 表t_score数据如图所示 我们想要以学科为列名&#xff0c;展示每个学生的科目成绩&#xff0c;可以先用CASE语句来选出每科的成绩&#xff0c;再进行求和。 选择科目时…

【C++】模拟实现list

&#x1f984;个人主页:修修修也 &#x1f38f;所属专栏:数据结构 ⚙️操作环境:Visual Studio 2022 目录 一.了解项目及其功能 &#x1f4cc;了解list官方标准 了解模拟实现list &#x1f4cc;了解更底层的list实现 二.list迭代器和vector迭代器的异同 &#x1f4cc;迭代…

SSH实现电脑VScode免密登录到虚拟机其原理

在网上想看一下这个原理。发现写的还是比较乱&#xff0c;所以自己总结了一份方便回顾 SSH免密登录的原理主要基于非对称密钥加密技术&#xff0c;比较常用的是RSA算法。 以下是SSH免密登录的详细步骤和原理&#xff1a; 1. 生成密钥对 在客户端上生成一对密钥&#xff0c;…

系统复习Java日志体系

一&#xff0c;我们采用硬编码体验一下几个使用比较多的日志 分别导入几种日志的 jar 包 <?xml version"1.0" encoding"UTF-8"?><project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSch…

【已解决】YOLOv8加载模型报错:super().__init__(torch._C.PyTorchFileReader(name_or_buffer))

《博主简介》 小伙伴们好&#xff0c;我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。 ✌更多学习资源&#xff0c;可关注公-仲-hao:【阿旭算法与机器学习】&#xff0c;共同学习交流~ &#x1f44d;感谢小伙伴们点赞、关注&#xff01; 《------往期经典推…

C#——Json数据存储

本文使用的软件为VS2022&#xff0c;不同的软件使用上有些许差异。 C#数据存储 关于数据存储&#xff0c;一般在退出控制台之后&#xff0c;暂存的数据都会释放掉&#xff0c;有没有什么方法能够在下一次进入的时候还能加载上一次的数据呢&#xff1f;答案是有的&#xff0c;关…

利用Arcgis设置分式标注(分子分母标注)

因工作需要&#xff0c;需要设置分式标注&#xff0c;下面详细介绍下如何利用arcgis 设置分式标注&#xff0c;以下操作以供参考&#xff0c;如有疑义可提出。 一、准备工作 软件&#xff1a;arcmap 示例数据&#xff1a;行政区shp矢量图 二、操作步骤 1.添加数据 将行政区sh…

Golang | Leetcode Golang题解之第307题区域和检索-数组可修改

题目&#xff1a; 题解&#xff1a; type NumArray struct {nums, tree []int }func Constructor(nums []int) NumArray {tree : make([]int, len(nums)1)na : NumArray{nums, tree}for i, num : range nums {na.add(i1, num)}return na }func (na *NumArray) add(index, val …

MinIO安装(思路、方法、步骤(以centos8安装为例))

MinIO安装&#xff08;思路、方法、步骤&#xff08;以centos8安装为例&#xff09;&#xff09; 简介 MinIO 是一个高性能、开源的对象存储系统&#xff0c;旨在提供简单、可扩展的存储解决方案&#xff0c;特别适用于大数据、AI 和 ML 应用。 步骤记录 首先我们进入官网看…

前端使用 Konva 实现可视化设计器(19)- 连接线 - 直线、折线

本章响应小伙伴的反馈&#xff0c;除了算法自动画连接线&#xff08;仍需优化完善&#xff09;&#xff0c;实现了可以手动绘制直线、折线连接线功能。 请大家动动小手&#xff0c;给我一个免费的 Star 吧~ 大家如果发现了 Bug&#xff0c;欢迎来提 Issue 哟~ github源码 gitee…

最全个人笔记【Makefile】

1. 基本概念 1.1 make是什么 当一个项目中要编译的文件很多时&#xff0c;手工使用编译器一个个进行编译&#xff0c;很明显不具有可操作性&#xff0c;此时必须借助某些软件&#xff0c;协助我们有序地、正确地自动编译整个工程的所有该编译的文件。这样的软件被称为 工程管…

Simulink|基于粒子群算法的永磁同步电机多参数辨识

目录 主要内容 模型研究 结果一览 下载链接 主要内容 仿真程序参考文献《改进粒子群算法的永磁同步电机多参数辨识》&#xff0c;采用粒子群算法与simulink模型结合的方式&#xff0c;对永磁同步电机进行多参数辨识。程序以定子绕组电阻、d轴电感、q轴电感和永磁…