记录一次前端绘画海报的过程及遇到的几个问题

先看效果

使用工具 html2canvas

js 复制代码
import html2canvas from 'html2canvas'

// 绘画前的内容  我就不过多写了
 <div class="content" ref="contentRef" v-show="!imgShow">
      <img :src="getReplaceImg(friendObj.coverUrl)" alt="" class="topImg">
</div>

//  canvas 绘画后的东西
 <div class="content padding0" v-show="imgShow">
    <van-icon name="cross" class="vanCross" @click.stop="clickDelete"/>
    <img :src="imageUrl" alt="" class="bigImg">
  </div>



//对前端html内容进行绘画
onLongPress(){
      setTimeout(() => {
        //生成图片
        let that = this;
        let drewPoster = that.$refs.contentRef
        html2canvas(drewPoster, {
          dpi: 300, //解决生产图片模糊
          useCORS: true,
          allowTaint: false,
          logging: false,
        }).then(function (canvas) {
          that.imageUrl = canvas.toDataURL("image/png");
          that.imgShow = true
          Toast.clear()
        })
      })
    },
// 但是因为前端中有img标签导致画的时候跨域了

解决跨域方法1 用 images.weserv.nl 公共图片库

js 复制代码
if (process.env.NODE_ENV === 'prod') {
        return url.indexOf('sss.bd.com.cn') !== -1 ? url.replace(/^(http)[s]*(:\/\/)/, 'https://images.weserv.nl/?url=') : url
      } else {
        return url.indexOf('sss-uat.bd.com.cn') !== -1 ? url.replace(/^(http)[s]*(:\/\/)/, 'https://images.weserv.nl/?url=') : url
      }

解决跨域方法2 前端自己做跨域设置 通过wechat_image做代理访问跨域的图片

复制代码
vue项目     default.conf  配置 nginx 配置

location /wechat_image {
      #proxy_set_header Host "$arg_host";
       proxy_set_header Referer "";
       resolver 114.114.114.114;
       proxy_pass $arg_url;
    }
  • 页面中对应图片地址
js 复制代码
 getReplaceImg(url) {
      if(!url) return
       if (process.env.NODE_ENV !== 'development') {
        const baseUrl = `${ process.env.VUE_APP 自己项目的域名  }/wechat_image`
        const newUrl = `${ baseUrl }?url=${ url 实际图片地址}`
        return newUrl
      }
   // https://sss-uat.bb.com.cn/wechat_image?url=https://s-f-uat.jetour.com.cn/2024-12-26/1735204221531/u=4293302727,535734201.jpg
    },
  • 前端本地想看效果需要在vue.config 里面配置代理
js 复制代码
     proxyTable: {
      '/wechat_image': {
        target:'http://localhost:8070',
        changeOrigin: true,
        pathRewrite: {
          '^/api': ''
        }
      }

但是遇到个坑

js 复制代码
https://s-f-uat.jetour.com.cn/2024-12-26/1735204221531/u=4293302727,535734201&fm=26.jpg


图片中有fm 导致解析图片一直有问题  fm会作为参数去请求导致有问题  有方法解决了麻烦告知下
相关推荐
START_GAME16 分钟前
MSSQL$SQL2016
java·服务器·前端
Captaincc23 分钟前
Show me your works & token -稀土掘金上线内测作品广场和用量统计
前端·掘金社区·vibecoding
进击的明明36 分钟前
闭包:JavaScript里的“随身背包” 🎒
前端·javascript·面试
紫幽2 小时前
从 0 用 Vue 做屏并生成 LVGL 单片机代码(完整源码备忘)
前端·单片机
郭邯2 小时前
用 AI 辅助开发一个文件大小转换工具:从需求到上线的完整过程
前端
勾勾圈圈蛋蛋2 小时前
前中台项目
前端
触底反弹2 小时前
🔐 前端鉴权不再难!手把手带你搞懂 JWT + Zustand + Axios 的完整登录方案
前端·axios
打呵欠的猫2 小时前
我用 AI 写了一个"需求翻译器",产品的 PRD 直接变成开发任务清单
前端·ai编程
fatcoder2 小时前
玩转Nginx 09 — 运维排障:三场"火灾"实战演练
前端·后端·nginx
前端玩坑坑2 小时前
View Transitions API 入门教程,优雅过度
前端