H5 生成海报图

H5 生成海报图vue生成海报图_h5生成海报

大家好,欢迎来到IT知识分享网。H5

●●●非原创、代码只提供参考●●●

第一步
1、安装插件

npm i qrcodejs2 --save
npm i html2canvas --save

第二部
直接复制代码粘贴,运行起来

<template>
  <div>
    <!-- 海报设计, 请根据需求进行修改即可 -->
    <!-- 不要去掉v-show, 就是为了渲染且不显示(开发调试CSS样式时打开,否则看不到) -->
    <!-- 您可以向里面加入任何元素及data上的数据, 实现DIY -->
    <!-- 到时候这整个DOM元素会生成图片(所见所得), 供用户保存下载 -->
    <div
    id="posterHtml"
    :style="{backgroundImage: 'url('+posterHtmlBg+')'}"
    v-show="false">
      <!-- 文案 -->
      <div class="text-content">
        <h1>{
  
  { posterContent }}</h1>
      </div>
      <!-- END -->
      <!-- 二维码 -->
      <div class="qrcode">
        <div class="text-wechat">
          <span>二维码扫码结果也是自定义的</span>
        </div>
        <div id="qrcodeImg" />
      </div>
      <!-- END -->
    </div>

    <input v-model="posterContent">
    <button @click="getImage()">生成海报</button>

    <!-- 最终海报图片显示出来 -->
    <img v-if="posterImg" :src="posterImg" class="result-image">
    <!-- END -->

  </div>
</template>

<script>
import QRCode from 'qrcodejs2'
import html2canvas from 'html2canvas'
export default {
  data() {
    return {
      // 文案内容
      posterContent: '所见即所得', 
      // 海报背景图
      posterHtmlBg: 'https://img-blog.csdnimg.cn/ad0937be901f44ac9c75b07709d4abaf.jpeg',
      // 最终生成的海报图片(base64)
      posterImg: '', 
    }
  },

  methods: {

    /**
     * 获取海报图片(base64)
     * @description 根据您的需求,处理base64图片
     * @return void
     */
    getImage() {
      // 例如,二维码扫描后打开百度网页
      this.createQrcode('http://www.baidu.com')
      // 绘制海报图片
      this.createPoster()
    },

    /**
     * 创建二维码
     * @description new QRcode({})
     * @param {String} - 二维码跳转的链接或文字
     * @return void
     */
    createQrcode(text) {
      // 获取DOM元素,这块也可以用ref获取
      const qrcodeImgEl = document.getElementById('qrcodeImg')
      qrcodeImgEl.innerHTML = ''
      // 这些配置详见文章底部
      let qrcode = new QRCode(qrcodeImgEl, {
        width: 100,
        height: 100,
        colorDark: '#000000',
        colorLight: '#ffffff',
        correctLevel: QRCode.CorrectLevel.H
      })
      qrcode.makeCode(text)
    },

    /**
     * 创建生成海报
     * @description 将DOM元素生成为base64
     * @return void
     */
    createPoster() {
      // 生成海报
      const vm = this
      // 获取根元素
      const domObj = document.getElementById('posterHtml')
      // html2canvas 官网: http://html2canvas.hertzen.com/
      // 配置文档: http://html2canvas.hertzen.com/configuration
      html2canvas(domObj, {
        useCORS: true,
        allowTaint: false,
        logging: false,
        letterRendering: true,
        onclone(doc) {
          let e = doc.querySelector('#posterHtml')
          e.style.display = 'block'
        }
      }).then(function(canvas) {
        // 在微信里,可长按保存或转发
        // 这里可以更改图片格式,默认是png
        vm.posterImg = canvas.toDataURL('image/png')
        // 最终生成的海报图片(base64)
        // console.log(vm.posterImg)
      })
    }

  }
}
</script>

<style scoped>
/* 样式根据您的需求修改即可 */
#posterHtml {
  width: 100%;
  height: 500px;
  background-size: 100% 100%;
  position: relative;
}
.text-content {
  color: #fff;
  background: red;
  text-align: center;
  padding: 20px;
}

/* 二维码 */
.qrcode {
  display: flex;
  justify-content: space-around;
  position: absolute;
  bottom: 0px;
  width: 100%;
}
.text-wechat {
  color: #fff;
}
#qrcodeImg {
  padding: 10px;
  background: #fff;
  border-radius: 10px;
}
/* END */


/* 最终海报 */
.result-image {
  width: 100%;
  height: 500px;
}
/* END */
</style>

第三部
根据项目需求,随意处置

屏幕截图

1、html部分代码

 <!-- 屏幕截图直接截 -->
    <div v-show="false">
      <img id="posterImg" :src="posterImg" class="">
    </div>

2、方法部分代码

(1)、posterHtml为需要截屏部分设置的id

 // 屏幕截图
    screenshot() { 
   
      const domObj = document.getElementById('posterHtml');
      html2canvas(domObj, { 
   
        useCORS: true, // 支持图片跨域
        scale: 2, // 设置放大的倍数
        height: document.getElementById('posterHtml').scrollHeight,
        windowHeight: document.getElementById('posterHtml').scrollHeight,
        onclone(doc) { 
   
          const e = doc.querySelector('#posterHtml');
          e.style.display = 'block';
        }
      }).then((canvas) => { 
   
        this.posterImg = canvas.toDataURL('image/png');
        this.$nextTick(() => { 
   
          this.saveImage();
        });
      });
    },

    // 保存图片
    saveImage() { 
   
      var imgName = '客需清单';
      var img = document.getElementById('posterImg');
      var link = document.createElement('a');
      link.href = img.src;
      link.download = imgName + '.png';
      document.body.appendChild(link);
      link.click();
      document.body.removeChild(link);
    }

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/27488.html

(0)

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信