利用html2canvas下载图片(全前端处理)

       html2canvas 是一款JavaScript 插件,它能够将网页上的HTMIL元素转化为Canvas 对象,从而可以将网页截图输出为图片或者 PDF文件。它的原理是通过遍历DOM树,将每一个HTML元素转化为Canvas对象,并叠加到一起形成一张完整的图片或者 PDF 文件。
       html2canvas的转化过程分为三步。首先,它会遍历DOM树,根据每个元素的位置、大小、颜色、边框等属性,生成对应的 Canvas对象;其次,它会将这些Canvas 对象按照z-index 值从小到大依次叠加在一起,形成一张完整的图片;最后,它会将图片输出为指定格式的文件。

      首先在我们的项目中安装html2canvas库

npm install html2canvas --save

 下面是具体的实现代码

<button @click="download">下载下方截图图片</button>
 <div ref="html2canvasRef">
   <h1>html2canvasRef所包裹的区域就是所下载的图片</h1>
   <h2>html2canvasRef所包裹的区域就是所下载的图片</h2>
 </div>
function download() {
  html2canvas(this.$refs["html2canvasRef"]).then((canvas) => {
    let dataURL = canvas.toDataURL("image/png"); //base64格式的图片 url
    // 创建a标签下载图片
    var addElement = document.createElement('a')
    addElement.href = dataURL
    addElement.download = "下载.png" //设置下载的图片名称
    
    document.body.appendChild(addElement)
    addElement.click();
    document.body.removeChild(addElement);
  });
}

也可以将base64格式的图片转化成file或blob格式的图片,兼容性更好。代码如下:

function download() {
  html2canvas(this.$refs["html2canvasRef"]).then((canvas) => {
    let dataURL = canvas.toDataURL("image/png"); //base64格式的图片 url
    const blobUrl = this.dataURLtoBlob(dataURL); //转化成blob格式的图片 Blob{size:xx,type:xx}
    var fileUrl = URL.createObjectURL(blobUrl); //URL.createObjectURL()创建一个指向File或Blob对象的URL。这个URL可以被用于指定一个HTML标签的href属性

    // 创建a标签下载图片
    var addElement = document.createElement('a')
    addElement.href = fileUrl
    addElement.download = "下载.png"
    
    document.body.appendChild(addElement)
    addElement.click();
    document.body.removeChild(addElement);
  });
}

function dataURLtoBlob(dataurl) {
  var arr = dataurl.split(','); //分割为数组,分割到第一个逗号
  let bstr = window.atob(arr[1]);
  let n = bstr.length;
  let u8arr = new Uint8Array(n);
  while (n--) {
      u8arr[n] = bstr.charCodeAt(n);
  }
  return new Blob([u8arr], { type: "png" });
}

链接:转为PDF 相关链接

前台导出pdf经验汇总 (html2canvas.js和浏览器自带的打印功能-print.js)以及后台一些导出pdf的方法_canvas 导出pdf_Schafferyy的博客-CSDN博客

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值