vue canvas应用 —— 页面文字内容生成一张图片


遇到了一需求,根据页面内容,生成一张图片,网上查找了相关资料,可以用html2canvas来实现。具体实现如下:

(1)首先,安装 html2canvas 库:

引入方式:

npm安装: npm install --save html2canvas

yarn安装: yarn add html2canvas

(2)页面中引入:

import html2canvas from 'html2canvas'

(3)具体使用:

先来放一下效果图,根据页面内容生成了一张包含相关信息的透明图片,如下图所示:

1)只有活动说明时:宽度为容器宽度,不需要根据文字来计算:
在这里插入图片描述2)有价格和活动说明时,需要根据左边文字宽度来计算绘制矩形的宽度:
在这里插入图片描述
3)有标题、价格和活动说明时,同样需要根据左边文字宽度来计算绘制矩形的宽度:
在这里插入图片描述
完整代码如下:

<template>
  <div class="add-pic-mark-container">
    <el-form :model="formData" label-width="120px" ref="form" :rules="formRules" v-loading="loading">
      <h3 class="title">素材配置信息:</h3>
      <div class="bottom-con">
        <div class="form-con left-con">
          <el-form-item label="区域颜色:">
            <bg-color :bgData="formData.priceColor" @updateC1="setPriceAreaColor" @updateC2="setPriceAreaColor" :title="''"></bg-color>
          </el-form-item>
          <el-form-item label="标题:">
            <div class="item-con">
              <el-input v-model="formData.priceTitle" clearable placeholder="请输入标题" :maxlength="maxLen"></el-input>
              <el-color-picker v-model="formData.priceTitleColor"></el-color-picker>
            </div>
          </el-form-item>
          <el-form-item label="价格:">
            <div class="item-con">
              <el-input v-model="formData.price" clearable placeholder="请输入价格" :maxlength="maxLen"></el-input>
              <el-color-picker v-model="formData.priceWordColor"></el-color-picker>
            </div>
          </el-form-item>
          <el-form-item label="活动颜色:">
            <bg-color :bgData="formData.activityColor" @updateC1="setActivityAreaColor" @updateC2="setActivityAreaColor" :title="''"></bg-color>
          </el-form-item>
          <el-form-item label="活动说明:" prop="activityDesc">
            <div class="item-con">
              <el-input v-model="formData.activityDesc" clearable placeholder="请输入活动说明" :maxlength="maxLen"></el-input>
              <el-color-picker v-model="formData.activityDescColor"></el-color-picker>
            </div>
          </el-form-item>
          <el-form-item label="透明图片:">
            <img :src="formData.imgUrl" alt srcset />
          </el-form-item>
        </div>
      </div>
      <el-form-item>
        <el-button @click="saveHandle" type="primary">保存</el-button>
        <el-button @click="cancleHandle">取消</el-button>
      </el-form-item>
    </el-form>
  </div>
</template>
<script>
import html2canvas from 'html2canvas'
import BgColor from '@/views/homepage/components/bgcolor.vue'

export default {
   
  name: 'AddMark',
  components: {
   
    BgColor
  },
  data () {
   
    return {
   
      loading: false,
      maxLen: 36,
      priceBgColor: '',
      activityBgColor: '',
      formData: {
   
        priceColor: [],
        priceTitle: '',
        priceTitleColor: '#EBD0B5',
        price: '',
        priceWordColor: '#EBD0B5',
        activityColor: [],
        activityDesc: '',
        activityDescColor: '#EBD0B5',
        imgUrl: ''
      },
      formRules: 
  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
好的,针对你的问题,我可以给你提供一些思路和参考方法: 1. 在 Vue 页面中引入 html2canvas 库,并使用其中的 toDataURL 方法将页面截图生成 Base64 图片数据。 2. 使用 Canvas图片上添加水印。 3. 可以添加多个水印,需要调整水印的位置和大小。 4. 最后将添加水印后的图片保存或上传到服务器。 下面是一个简单的示例代码,仅供参考: ``` <template> <div> <button @click="generateImage">生成图片</button> </div> </template> <script> import html2canvas from 'html2canvas'; export default { methods: { async generateImage() { const canvas = await html2canvas(document.querySelector('#target'), { useCORS: true, }); const ctx = canvas.getContext('2d'); const img = new Image(); img.src = canvas.toDataURL(); // 添加水印 img.onload = () => { // 添加第一个水印 ctx.font = 'bold 20px Arial'; ctx.fillStyle = 'rgba(255, 255, 255, 0.6)'; ctx.fillText('watermark1', 50, 50); // 添加第二个水印 ctx.font = 'bold 30px Arial'; ctx.fillStyle = 'rgba(255, 255, 255, 0.6)'; ctx.fillText('watermark2', 200, 200); // 将添加水印后的图片保存到本地 const link = document.createElement('a'); link.download = 'image.png'; link.href = canvas.toDataURL(); link.click(); }; }, }, }; </script> ``` 这里添加的两个水印只是示例,你可以根据需要添加更多的水印,并调整水印的位置和大小。同时,你需要注意浏览器的跨域问题,如果出现跨域问题,可以使用 `useCORS` 参数解决。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值