html页面截图 html2canvas学习

html页面截图 html2canvas学习

html2canvas介绍

html2canvas是一个js插件,可以非常简单的帮我实现html截图
官网
安装

npm install html2canvas

官方给的简单的例子
这个例子适应的html2canvas ^1 的版本

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

^0.5.0版本

html2canvas(document.body),
  {
    onrendered: function(canvas) {
      document.body.appendChild(canvas);
    }
  };

demo

html

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <meta http-equiv="Access-Control-Allow-Origin" content="ie=edge" />
    <title>Document</title>
    <link
      rel="stylesheet"
      href="./node_modules/bootstrap/dist/css/bootstrap.min.css"
    />
  </head>
  <body>
    <div id="bg" style="background:url('./bg.jpg') no-repeat;height: 700px;">
      <!-- <img src="./bg.jpg" alt="" /> -->
      <input
        type="text"
        id="text"
        style="
        border: 0;
        background-color: transparent;
        position: absolute;
        margin-top: 345px;
      left: 70px;
      width: 350px; align-self: center;
      text-align: center;
        color: #f46ea1;"
        placeholder="我是宋健 我在东软"
      />
    </div>
    <!-- <a id="down" href="" download="downImg">下载</a> -->
    <button type="button" id="picture" class="btn btn-success">截图</button>
    <script src="./node_modules/html2canvas/dist/html2canvas.min.js"></script>
    <script src="index.js"></script>
  </body>
</html>

js

document.querySelector('#picture').addEventListener('click', () => {
  html2canvas(document.querySelector('#bg'), {
    // useCORS: true,
    onrendered: canvas => {
      const imageData = canvas.toDataURL();
      // var imageData = canvas
      //   .toDataURL('image/png')
      //   .replace('image/png', 'image/octet-stream');
      //   var imageData = canvas
      //     .toDataURL('image/jpg')
      //     .replace('image/jpg', 'image/octet-stream');
      const a = document.createElement('a');
      a.setAttribute('href', imageData);
      a.setAttribute('download', 'picture.png');
      a.click();
      a.remove();
    }
  });
});

遇到的问题

Uncaught (in promise) DOMException: Failed to execute 'toDataURL' on 'HTMLCanvasElement': Tainted canvases may not be exported.

因为要截图dom里含有背景图片,所以canvas 图片跨域了,所以出现了这个问题

在网上尝试很多博客中的解决办法
useCORS: true
var imageData = canvas.toDataURL(‘image/png’).replace(‘image/png’, ‘image/octet-stream’);

都没有解决

最后的解决办法,让nginx代理一下就好了

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值