以下是依赖于html2canvas生成的海报成果,亲测无效

以一张背景图+二维码的布局为例

html局部:

  <div class="container">    <div class="share-img">      <img style="width: 300px; height: 300px" :src="imgUrl" alt="分享图" />    </div>    <div class="creat-img" ref="box">      <img        src="https://img0.baidu.com/it/u=3998012246,2453684564&fm=26&fmt=auto&gp=0.jpg"        alt="分享背景图"      />      <div id="qrcode" class="qrcode"></div>    </div>  </div>

大抵是share-img这个盒子用来寄存最终生成的canvas海报
creat-img盒子是寄存原始dom背景图和二维码的构造布局,下边通过html2canvas将其转换为画布海报

js局部:

<script>import { qrcanvas } from "qrcanvas";import html2canvas from "html2canvas";export default {  data() {    return {      imgUrl: "",    };  },  watch: {    imgUrl(val, oldval) {      //监听到imgUrl有变动当前 阐明新图片曾经生成 暗藏DOM      this.$refs.box.style.display = "none";    },  },  mounted() {    let that = this;    that.$nextTick(function () {      //生成二维码      var canvas1 = qrcanvas({        data: decodeURIComponent("https://www.baidu.com/"),//你的二维码条跳转地址        size: 128,      });      document.getElementById("qrcode").innerHTML = "";      document.getElementById("qrcode").appendChild(canvas1);      //合成分享图      html2canvas(that.$refs.box).then(        function (canvas) {          that.imgUrl = URL.createObjectURL(            that.base64ToBlob(canvas.toDataURL())          );          // ios的话会存在还未加载完就进行绘制,若为ios则放到定时器里执行          // setTimeout(() => {}, 2000);        }      );    });  },  methods: {    //base64转blob    base64ToBlob(code) {      let parts = code.split(";base64,");      let contentType = parts[0].split(":")[1];      let raw = window.atob(parts[1]);      let rawLength = raw.length;      let uInt8Array = new Uint8Array(rawLength);      for (let i = 0; i < rawLength; ++i) {        uInt8Array[i] = raw.charCodeAt(i);      }      return new Blob([uInt8Array], { type: contentType });    },  },};</script>

css局部

<style lang='scss' scoped>.creat-img {  width: 300px;  position: relative;  height: 300px;  img {    width: 100%;    height: 100%;    z-index: 3;  }  .qrcode {    position: absolute;    bottom: 0rem;    left: 75%;    margin-left: -64px;    z-index: 5;  }}</style>

留神:html2canvas绘制的时候要加跨域解决,否则绘制出的图片为空白的:加上
{ allowTaint: false, useCORS: true }

      html2canvas(that.$refs.box, { allowTaint: false, useCORS: true }).then(        function (canvas) {          that.imgUrl = URL.createObjectURL(            that.base64ToBlob(canvas.toDataURL())          );          // ios的话会存在还未加载完就进行绘制,若为ios则放到定时器里执行          // setTimeout(() => {}, 2000);        }      );

原文参考链接https://blog.csdn.net/zuorish...