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

先看效果

使用工具 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会作为参数去请求导致有问题  有方法解决了麻烦告知下
相关推荐
牧羊狼的狼26 分钟前
React 中的 HOC 和 Hooks
前端·javascript·react.js·hooks·高阶组件·hoc
知识分享小能手2 小时前
React学习教程,从入门到精通, React 属性(Props)语法知识点与案例详解(14)
前端·javascript·vue.js·学习·react.js·vue·react
魔云连洲2 小时前
深入解析:Vue与React的异步批处理更新机制
前端·vue.js·react.js
mCell2 小时前
JavaScript 的多线程能力:Worker
前端·javascript·浏览器
超级无敌攻城狮4 小时前
3 分钟学会!波浪文字动画超详细教程,从 0 到 1 实现「思考中 / 加载中」高级效果
前端
excel5 小时前
用 TensorFlow.js Node 实现猫图像识别(教学版逐步分解)
前端
gnip5 小时前
JavaScript事件流
前端·javascript
赵得C5 小时前
【前端技巧】Element Table 列标题如何优雅添加 Tooltip 提示?
前端·elementui·vue·table组件
wow_DG5 小时前
【Vue2 ✨】Vue2 入门之旅 · 进阶篇(一):响应式原理
前端·javascript·vue.js
weixin_456904275 小时前
UserManagement.vue和Profile.vue详细解释
前端·javascript·vue.js