vue实现网页截图

2023-11-04

 1、安装html2Canvas

npm install html2canvas --save

2、在需要的vue组件中引入

import html2canvas from "html2canvas";

3、编写一个截图按钮

<el-button class="button-dalod" size="mini" title="生成图片" @click="toImage()" icon="el-icon-download"></el-button>

4、调用函数toImage

// 页面元素转图片
        toImage () {
            // 手动创建一个 canvas 标签
            const canvas = document.createElement("canvas")
            // 获取父标签,意思是这个标签内的 DOM 元素生成图片
            // imageTofile是给截图范围内的父级元素自定义的ref名称
            let canvasBox = this.$refs.imageTofile
            // 获取父级的宽高
            const width = parseInt(window.getComputedStyle(canvasBox).width)
            const height = parseInt(window.getComputedStyle(canvasBox).height)
            // 宽高 * 2 并放大 2 倍 是为了防止图片模糊
            canvas.width = width * 2
            canvas.height = height * 2
            canvas.style.width = width + 'px'
            canvas.style.height = height + 'px'
            const context = canvas.getContext("2d");
            context.scale(2, 2);
            const options = {
                backgroundColor: null,
                canvas: canvas,
                useCORS: true
            }
            html2canvas(canvasBox, options).then((canvas) => {
                // toDataURL 图片格式转成 base64
                let dataURL = canvas.toDataURL("image/png")
                console.log(dataURL)
                this.downloadImage(dataURL)
            })
        },
        //下载图片
        downloadImage(url) {
            // 如果是在网页中可以直接创建一个 a 标签直接下载 
            let a = document.createElement('a')
            a.href = url
            a.download = '首页截图'
            a.click()
        },

别忘了给页面所在截图范围内的父级添加ref属性,方便canvas找到父级计算宽高从而截屏

 这就是截图出来的效果:

(上传图片)补充: 

将截完的图片转为文件流,上传给后台

将上面的dataUrl传递到base64转文件流的函数里面,就可以通过formdata传参传递给后台即可。

        // base64图片转成二进制文件流
        base64toFile (dataurl, filename = 'file') {
            let arr = dataurl.split(',')
            let mime = arr[0].match(/:(.*?);/)[1]
            let suffix = mime.split('/')[1]
            let bstr = atob(arr[1])
            let n = bstr.length
            let u8arr = new Uint8Array(n)
            while (n--) {
                u8arr[n] = bstr.charCodeAt(n)
            }
            return new File([u8arr], `${filename}.${suffix}`, {
                type: mime
            })
        },

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

vue实现网页截图 的相关文章

随机推荐

  • 【react】props的简写方式

    props的简写 用static 就可以把类的属性写在类的里面 div div div div
  • linux(centos)无中文输入,如何解决

    1 终端执行安装命令 yum install Chinese Support 2 如下图 多出Input method 3 点击进行配置 4 reboot重启系统 新建一个文本 试一下输入 问题出来 难道是当时新建虚拟机时没有选择增强型虚拟
  • 【Linux】僵尸进程的检测,清理和避免

    一 僵尸进程的产生 一个进程终止的方法很多 进程终止后有些信息对于父进程和内核还是很有用的 例如进程的ID号 进程的退出状态 进程运行的CPU时间等 因此进程在终止时 回收所有内核分配给它的内存 关闭它打开的所有文件等等 但是还会保留以上极
  • 九章算法

    两个排序的数组A和B分别含有m和n个数 找到两个排序数组的中位数 要求时间复杂度应为O log m n 在线评测地址 LintCode 领扣 说明 中位数的定义 这里的中位数等同于数学定义里的中位数 中位数是排序后数组的中间值 如果有数组中
  • docker容器为什么总会挂掉?

    最近使用docker启动nginx时总会自动退出 看了一些文章后解决了问题 也明白了一些道理 将这些知识总结一下 只使用命令 docker run nginx就会自动退出 需要增加个死循环while true do echo hello s
  • 手把手教你编写Python抢购脚本

    想买mate40 但总是抢不到 所以想试着能不能写个脚本代码 第一步 把想要抢购的商品加进购物车 注意 脚本是对购物车内全部商品进行下单操作 所以不够买的商品最好先从购物车内删除 第二步 写好Python脚本 在抢购之前运行 并设置好抢购时
  • python基础教程:包的创建及导入

    包是一种通过用 带点号的模块名 来构造 Python 模块命名空间的方法 例如 模块名 A B 表示 A 包中名为 B 的子模块 正如模块的使用使得不同模块的作者不必担心彼此的全局变量名称一样 使用加点的模块名可以使得 NumPy 或 Pi
  • 数据库索引中包含的数据结构有哪些

    1 索引介绍 MySQL官方对索引的定义为 索引 Index 是帮助MySQL高效获取数据的数据结构 提取句子主干 就可以得到索引的本质 索引是数据结构 我们知道 数据库查询是数据库的最主要功能之一 例如下面的SQL语句 SELECT FR
  • 设计模式_单例模式

    线程的单例模式 一 懒汉式线程单例模式 以下该实例是懒汉式的单例模式 线程不安全 public class Singleton private static Singleton singleton private Singleton 设置构
  • Pid文件和路径

    Pid文件和路径 var run通常是存放pid文件的位置 var run是tmpfs文件系统 每次重启的时候都会清空 其中 var run是 run的链接 由于每次都清空 所以 如果想在 var run下面的子目录创建pid文件的话 子目
  • 高精度车牌识别算法

    一 车牌识别概述 车牌识别属于OCR的一种 但它也有自己的特点 考虑到边缘设备部署 我们没有用lstm 仅用普通的卷积层便实现了高精度的车牌识别方案 车牌识别的应用场景也十分广泛 常见的停车场收费系统 车牌识别算法也是智能交通算法中的基础算
  • 杭州乐园一日游攻略

    交通路线 杭州乐园就在湘湖边上 在地铁一号线的湘湖站下车后还有几公里路程 可以选择打车或者公交 门票购买 微信公众号 淘宝 美团都有卖的 可以都看看 有的平台会有优惠 时间安排 1 早上越早去越好 排队的人少一点 2 去的时候先看看过上车排
  • pytorch 训练_基于文件存储UFS的Pytorch训练IO优化实践

    我们在协助某AI客户排查一个UFS文件存储的性能case时发现 其使用的Pytorch训练IO性能和硬件的IO能力有很大的差距 后面内容有具体性能对比数据 让我们感到困惑的是 UFS文件存储 我们使用fio自测可以达到单实例最低10Gbps
  • 矩阵的零空间和零度

    矩阵的零空间和零度 摘要 矩阵的零空间 nullspace 矩阵的零度 nullity 秩 零度定理 The Rank Nullity Theorem numpy 与 scipy 中求矩阵的秩与零空间 摘要 这篇短文中将介绍矩阵零空间与矩阵
  • 淘宝变脸:马云的反击战

    这就是一场剑拔弩张的战争 一连数日 淘宝的公关部都挤在一间不到10平方米的房间里忙个不停 他们不仅要监视各大网络论坛的动态 还得不停处理大量的电话 传真以及电子邮件 这都是发往全国各媒体的文件 声明 自淘宝9月初屏蔽百度搜索以来 双方的摩擦
  • 【Kubernetes】Error: Cask minikube is unavailable No Cask with this name exists

    1 概述 从Mac OS Catalina开始 Kubernetes文档中提供的方法不起作用了 并且Brew cask似乎也没有minikube 这里可以看到好像没有minikube了 gt Updated Casks 4k stogram
  • 【Antlr】Antlr 自动错误恢复机制

    1 概述 上一篇文章 Antlr Antlr 修改和转发Antlr的错误消息 出自 antlr 权威指南 并且补充 错误恢复指的是允许语法分析器在发现语法错误后还能继续的机制 原则上 最好的错误恢复来自人类在手工编写的递归下降的语法分析器中
  • Retrofit发起请求的流程

    请求流程 retrofit在okhttp之上做主要有 动态代理生成api的类 以及实例 Retrofit中的动态代理 使用用Converter 对请求参数和返回参数据的处理 使用Adapter对返回类型进行封装 以Observalbe为例
  • PAT 1033 旧键盘打字

    题目链接 请点击 思路 用string定义两个字符串 然后比较就可以了 然而 开始直接用cin gt gt str1 gt gt str2 导致有部分测试点始终未过去 后来参考他人的博客才发现这里应该用getline原因就在于第一行可能是空
  • vue实现网页截图

    1 安装html2Canvas npm install html2canvas save 2 在需要的vue组件中引入 import html2canvas from html2canvas 3 编写一个截图按钮