解决html2canvas图片跨域的终极办法
使用二进制
我之前解决图片跨域问题是使用PHP做代理,将图片转化为base64:
https://www.wubin.work/blog/articles/394
今天我提供一个新的方法,堪称是终极方法!
这里用的方法是将文件读入到blob文件对象,然后用URL.createObjectURL()方法转换成img src可用的地址,然后再转canvas。这样不管是哪种跨域都可以直接解决!
原始版:
getImage:function (url,imgId) {
var xhr = new XMLHttpRequest();
xhr.open('get', url, true);
xhr.responseType = 'blob';
xhr.onload = function () {
if (this.status == 200) {
document.getElementById(imgId).src = URL.createObjectURL(this.response);
}
};
xhr.send();
},
封装promise
export function getImage2Blob (url) {
return new Promise((resolve, reject) => {
var xhr = new XMLHttpRequest();
xhr.open('get', url, true);
xhr.responseType = 'blob';
xhr.onload = function () {
if (this.status == 200) {
const blob = URL.createObjectURL(this.response);
resolve(blob);
} else {
reject(false);
}
};
xhr.send();
});
}
使用:
const img = $('#image')[0];
try {
const imgRes = await getImage2Blob(img.src);
img.src = imgRes;
} catch (e) {
window.alert('有图片转换失败,请查看控制台');
return;
}