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

先看效果

使用工具 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会作为参数去请求导致有问题  有方法解决了麻烦告知下
相关推荐
努力的小郑1 小时前
今晚Cloudflare一哆嗦,我的加班计划全泡汤
前端·后端·程序员
q***64972 小时前
头歌答案--爬虫实战
java·前端·爬虫
凌波粒2 小时前
SpringMVC基础教程(4)--Ajax/拦截器/文件上传和下载
java·前端·spring·ajax
液态不合群3 小时前
DDD驱动低代码开发:从业务流程到领域模型的全链路设计
前端·低代码·架构·ddd
jonyleek3 小时前
JVS低代码开发中,如何创建自定义前端页面并接入到现有系统中,从创建到接入的全攻略
前端·低代码·前端框架·软件开发
谢尔登3 小时前
【React】React组件的渲染过程分为哪几个阶段?
前端·javascript·react.js
MediaTea3 小时前
Python 第三方库:Flask(轻量级 Web 框架)
开发语言·前端·后端·python·flask
5***o5004 小时前
前端构建工具缓存清理,解决依赖问题
前端·缓存
lcc1874 小时前
Vue Vue与VueComponent的关系
前端·vue.js
无敌最俊朗@4 小时前
Vue 3 概况
前端·javascript·vue.js