使用 html2canvas 生成图片

1、Html2Canvas 概述

html2canvas允许您直接在用户浏览器上对网页或其部分进行“截图”。屏幕截图基于 DOM,因此可能不是 100% 准确到真实表示,因为它不会制作实际的屏幕截图,而是根据页面上可用的信息构建屏幕截图。

官方文档:https://html2canvas.hertzen.com/documentation

2、使用Html2Canvas截图

这里还是通过vue项目来进行说明,先安装依赖。

npm install html2canvas

官网用法说明:要element使用带有一些(可选)选项的 html2canvas 渲染,只需调用html2canvas(element, options);

html2canvas(document.body).then(function(canvas) {
    document.body.appendChild(canvas);
});

首先我们在指定的vue页面先将html2canvas导入。

import html2canvas from "html2canvas";

假设我们这里有一个canvas对象,是通过echart绘制的一个图,其对应的html代码如下:

<div id="myChart" class="myChart"></div>

之后我们给添加一个下载按钮,直接触发downloadImg事件。先直接获取canvas的toDataURL得到的是一个base64编码后的图片数据,之后我们只需要将这个base64的数据生成图片下载下来即可。

    /**
     * 下载图片
     */
    downloadImg() {
      console.log("download ....");
      html2canvas(document.querySelector("#myChart")).then((canvas) => {
          var url = canvas.toDataURL();
          this.downloadFile(url, "中国地图");
      });
    },
    /**
     * @description Base64转Blob
     * @param dataUrl base64地址
     */
    dataURLtoBlob(dataurl) {
      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 Blob([u8arr], { type: mime });
    },
    /**
     * @description 构建a标签,通过a标签下载文件
     * @param url 下载地址
     * @param name 下载的文件名
     */
    downloadFile(url, name = "中国地图") {
      var a = document.createElement("a");
      a.setAttribute("href", url);
      a.setAttribute("download", name);
      a.setAttribute("target", "_blank");
      let clickEvent = document.createEvent("MouseEvents");
      clickEvent.initEvent("click", true, true);
      a.dispatchEvent(clickEvent);
    },
    /**
     * @description 将得到的base64文件转码下载
     * @param base64 图片base64编码
     * @param name 文件名称
     */
    downloadFileByBase64(base64, name) {
      var myBlob = this.dataURLtoBlob(base64);
      var myUrl = URL.createObjectURL(myBlob);
      this.downloadFile(myUrl, name);
    },
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Modify_QmQ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值