美文网首页
vue中使用html2canvas将html生成图片

vue中使用html2canvas将html生成图片

作者: lunatic_929 | 来源:发表于2019-07-19 17:28 被阅读0次

html2canvas?

html2canvas可以通过获取HTML的某个元素,然后生成Canvas,能让用户保存为图片。
下面将简述html内容(其中也包含了二维码生成到图片上)生成图片过程以及遇到过的一些问题

在vue里使用html2canvas

安装

npm install html2canvas  -d

引入

import html2canvas from 'html2canvas';

布局

<div id="captureId" class="capture" v-show="firstFlag">
  <!-- 需要生成为图片的内容 -->
   <img src="./../images/pic.png" class="capture-bg" alt="">
   <div class="content-box">
       <div class="avatar">
          <img :src="hero.headPic" alt="">
       </div>
       <p class="t1 pos1">{{hero.title}}<br>{{hero.str1}}</p>
       <div class="ewm-box">
             <!-- 生成二维码 -->
              <div class="qrcode" ref="qrCodeUrl"></div>
        </div>  
     </div>
 </div>
 <!-- 需要生成为图片的内容 -->
<div class="capture-img">
    <!-- 生成后的图片 -->
    <img :src="dataURL" alt="" v-show="!firstFlag">
 </div>

其中QRCode是生成二维码用到的JavaScript 库,html2canvas转需要生成图片的html内容为图片

<script type="text/ecmascript-6">
import html2canvas from 'html2canvas'; // 引入
import { hposter } from '../../../goaward.js'
import QRCode from 'qrcodejs2' // 二维码
export default {
  name: 'poster',
  data () {
    return {
        dataURL:'', 
        firstFlag: true,
        hero: {}
    }
  },
  components: {
    html2canvas
  },
  mounted () {
    hposter().then(res => {
     this.hero = res.data
     this.creatQrCode(); // 调用生成的二维码
     this.$nextTick(()=> { // 使用$nextTick,解决数据还没有渲染到html就先转为图片,此时的图片会是空内容的问题
         html2canvas(document.querySelector('#captureId'), { // 转换为图片
             useCORS:true // 解决资源跨域问题
            }).then(canvas => {
              let imgUrl = canvas.toDataURL('image/png');
              this.dataURL = imgUrl;
              this.firstFlag = false;
         })
      })
    })
  },
  methods: {
    creatQrCode () { // 生成二维码
      var qrcode = new QRCode(this.$refs.qrCodeUrl, {
          text: this.hero.shareUrl, // 填写需要生成二维码的地址
          width: 90,
          height: 90,
          colorDark: '#000000',
          colorLight: '#ffffff',
          correctLevel: QRCode.CorrectLevel.H
      })
    },
  }
}
</script>

其中遇到的问题
1、ios无法转成为图片
原因:
图片不能设置成background显示,需要使用img(如:<img src="./../images/pic.png" class="capture-bg" alt="">刚开始设置在了background,ios则无法生成为图片)导致无法实现图片保存
2、数据还未渲染到html里面就先转为了图片,导致生成的图片没有内容
解决:
使用this.$nextTick(()=> {
//html2canvas转换内容
})

相关文章

网友评论

      本文标题:vue中使用html2canvas将html生成图片

      本文链接:https://www.haomeiwen.com/subject/trvslctx.html