vue3.0+TypeScript+html2Canvas生成海报方案

前端生成海报方案-html2Canvas
1.如何工作

该脚本遍历加载它的页面的DOM,收集所有元素的信息 在那里,然后它使用它来构建页面的表示。

2.支持的CSS属性和值的列表及其不支持的属性

-官方文档

3.使用方法-Roubin
  • npm install --save html2canvas
    
  • 在onMounted阶段获取海报所需要的数据-代码如下

    onMounted(() => {
      getYearBillInfo();
    })
    const getYearBillInfo = () => {
      queryYearBillInfo().then((res: YearBillInfo) => {
        if (res) {
          posterList.value.length = 0;
          nextTick(() => {
            posterShow.value = true;
            canvasPoster();
          })
        }
      })
    }
    
  • 绘制海报-h5部分(以下是生成两张海报页面部分,根据不同需求绘制不同的页面)

       <!-- 最爱听-第一张海报页面 -->
    <div class="share-swipe-item-canvas" id="poster-favorite" v-if="posterLayoutShow">
        <img :src="shareFavoriteBg" alt="" class="share-swipe-item-img">
        <div class="share-swipe-item-text">2023年,你最喜欢听的书是<br /><span class="color-ff5c00">《{{ favoriteBookName
        }}》</span><br />这本书你一共听了 <span class="color-ff5c00">{{ favoriteListenTime }}</span>
          分钟<br />你如此着迷<br />还记得,是哪句话打动了你
        </div>
        <div class="share-swipe-item-nickname">我是{{ userNickName }}</div>
        <img :src="qrCodeAddress" alt="" class="share-swipe-item-qrcode">
      </div>
    
      <!-- IP-第二张海报页面 -->
      <div class="share-swipe-item-canvas" id="poster-ip" v-if="posterLayoutShow">
        <img
          :src="mListenType === 1 ? shareSpecialIpOneBg : mListenType === 2 ? shareSpecialIpTwoBg : mListenType === 3 ? shareSpecialIpThreeBg : shareSpecialIpFourBg"
          alt="" class="share-swipe-item-img">
        <div class="share-swipe-item-nickname">我是{{ userNickName }}</div>
        <img :src="qrCodeAddress" alt="" class="share-swipe-item-qrcode">
      </div>
    
  • 绘制海报方法-canvasPoster

    import html2canvas from "html2canvas";
    /**
     * 画海报
     */
    const canvasPoster = () => {
      if (posterList.value.length < 2) {
    	 if (posterList.value.length === 1) {
          currentCanvasHtmlId.value = "poster-favorite";
        } else {
          currentCanvasHtmlId.value = "poster-special";
        }
        posterContent.value = document.getElementById(currentCanvasHtmlId.value as string);
        html2canvas(posterContent.value as any, {
          width: posterContent.value?.clientWidth, // 生成图片的宽度
          height: posterContent.value?.clientHeight, // 生成图片的高度
          scale: 2, //scale 将其调大可以解决低分辨率设备下生成的图片模糊问题
          useCORS: true, // 是否允许跨域 如果不行在img标签增加 crossOrigin="Anonymous" 属性
        }).then((canvas: any) => {
          // 生成一个base64的图片路径
          let dataURL = canvas.toDataURL("image/png");
          posterList.value.push(dataURL)
          canvasPoster();
        })
      } else {
        posterShow.value = false;
        posterLayoutShow.value = false;
      }
    }
    

    PS:具体生成海报属性值:,最常用的是代码中的width、height、scale、useCORS

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

guration),最常用的是代码中的width、height、scale、useCORS

​ [外链图片转存中…(img-jKP8LzNI-1704418287347)]

  • 25
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值