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

先看效果

使用工具 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会作为参数去请求导致有问题  有方法解决了麻烦告知下
相关推荐
excel1 分钟前
理解 JavaScript 中的 for...in 与 for...of 的区别
前端
前端小巷子31 分钟前
Webpack 5模块联邦
前端·javascript·面试
玲小珑34 分钟前
Next.js 教程系列(十九)图像优化:next/image 与高级技巧
前端·next.js
晓得迷路了34 分钟前
栗子前端技术周刊第 91 期 - 新版 React Compiler 文档、2025 HTML 状态调查、Bun v1.2.19...
前端·javascript·react.js
江城开朗的豌豆41 分钟前
Vue和React中的key:为什么列表渲染必须加这玩意儿?
前端·vue.js·面试
江城开朗的豌豆1 小时前
前端路由傻傻分不清?route和router的区别,看完这篇别再搞混了!
前端·javascript·vue.js
pengzhuofan1 小时前
Web开发系列-第0章 Web介绍
前端
小鱼人爱编程1 小时前
Java基石--反射让你直捣黄龙
前端·spring boot·后端
JosieBook2 小时前
【web应用】如何进行前后端调试Debug? + 前端JavaScript调试Debug?
前端·chrome·debug
LBJ辉2 小时前
2. Webpack 高级配置
前端·javascript·webpack