html2canvas生成图片处理跨域问题

292 阅读1分钟

项目需求:点击按钮,生成图片。

环境:vue,h5

项目思路:使用html2canvas,生成图片使用 生成纯文字,可以直接使用

开发遇到的问题,接收https图片会出现跨域问题

html2canvas参数
html2canvas(
    document.querySelector(('#noImg')//要画的的元素,参数{
        taintTest: false,
        useCORS:true,   
        allowTaint:true,
        x:0dpi: 300height: document.querySelector('#noImg').offsetHeight,
        width: document.querySelector('#noImg').offsetWidth,
    }).then(res=>{,
        let imgUrl = canvas.toDataURL('image/png'); //将生成的图片解码
        this.saveImg = imgUrl;                      //图片赋值到你要展示的环境
           //因为需求是在微信环境中可以保存图片,转发给朋友 所以这个地方不做处理
})

普通https的图片接收

eg:
<img class="contain" :src="bannerImg+'?'+timestamp" crossOrigin="anonymous"  alt="">
crossOrigin="anonymous" 图片跨域处理(必须要写)
timestamp(时间戳)(必须要加),
bannerImg图片地址

如若是富文本下的图片 同理转化

判断富文本中是否有img标签全局替换加上crossOrigin="anonymous"属性,并给图片后缀加上时间戳
this.artObj.details = this.artObj.details.replace(/img/g, 'img crossOrigin="anonymous"')
this.artObj.details = this.artObj.details.replace(/png/g, `png?${timestamp}`)

最最最最最最最重要的一点,跨域问题不是单单前端就解决的,需找后台协调

例如我这边是图片放在oss阿里云服务器上,所以一定要让后台在阿里云服务器上配置上*,

本人是前端小白,关于原理不太懂,希望能和大家分享项目中遇到的问题