使用html2canvas生成海报,阿里云oss图片或网络图片报跨域问题

使用html2canvas生成海报,阿里云oss图片或网络图片报跨域问题

背景

项目中需要一个生成海报功能,因为图片是上传到了阿里云oss上面,所以导致html2canvas截图得时候,图片显示空白然后配置html2canvas日志功能 logging: false, 发现图片报了跨域问题,首先开启了html2canvas useCORS:true, 发现并没有什么用。

解决思路

解决问题搜索过程中发现一篇大佬的文章,说阿里云服务器配置允许跨域之后,还是不行得情况下,将浏览器disabled cache 勾选上,试了下发现可以正常生成海报,但是也不可能给每个用户教他们去开始这个disabled cache 。此时想到是否可以使用请求来请求图片转换一下,碰巧又发现一篇文章可以将图片地址发送一次请求,获取请求返回得值作为图片路径,但是发现还是报错跨域,然后对比开启disabled cache,发现请求头中多出一个Cache-Control :no-cache ,于是设置请求头,至此跨域问题解决,下面上代码

/**
 * 点击图片将需要生成海报得oss图片做下请求
 */
checkewm(ewm) {
  this.tempPoster = Object.assign({}, ewm);
  this.boxShow = true;
  this.getImage(this.tempPoster.pic,'dialogBgImg')
  this.getImage(this.ewm,'dialogEwm')
},
/**
 * 将oss图片做一次请求,转换下,网络路径图片都可以
 * url: 网络图片得路径
 * imgId: 网络图片img标签得id
 */ 
getImage(url,imgId) {
   console.log(url,imgId)
   var xhr = new XMLHttpRequest();
   xhr.open('get', url, true);
  // 设置请求头(这一步得设置不然oss图片还是跨域)
   xhr.setRequestHeader("Cache-Control", "no-cache");
   xhr.responseType = 'blob';
   xhr.onload = function () {
     if (this.status == 200) {
       document.getElementById(imgId).src =  URL.createObjectURL(this.response);
       console.log('this.response',this.response)
     }
   };
   xhr.send();
},
/**
 * 生成海报并下载得方法
 */ 
createdimg() {
  // 转换需要生成海报得图片
  // this.$refs.imageWrapper 需要截图得容器
   html2canvas(this.$refs.imageWrapper, {
     useCORS: true,
     logging: false,
   }).then((canvas) => {
     // 创建a标签下载
     const link = document.createElement("a"); // 创建a标签
     link.href = canvas.toDataURL(); // 是canvas对象的一种方法,用于将canvas对象转换为base64位编码
     link.setAttribute("download", "图片canvas.png"); // 利用了a标签的download 来下载 canvas图片
     link.style.display = "none"; // 将图片隐藏起来
     document.body.appendChild(link); // 插入到其中
     link.click();
   });
 },
  • 5
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值