项目需求:点击按钮,生成图片。
环境:vue,h5
项目思路:使用html2canvas,生成图片使用 生成纯文字,可以直接使用
开发遇到的问题,接收https图片会出现跨域问题
html2canvas参数
html2canvas(
document.querySelector(('#noImg')//要画的的元素,参数{
taintTest: false,
useCORS:true,
allowTaint:true,
x:0,
dpi: 300,
height: 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阿里云服务器上,所以一定要让后台在阿里云服务器上配置上*,
本人是前端小白,关于原理不太懂,希望能和大家分享项目中遇到的问题