function getBase64Image(url) {
const img = new Image();
img.src = url;
//因为是网络资源所以会有图片跨域问题产生,此属性可以解决跨域问题,下文详解
img.setAttribute('crossOrigin', 'anonymous');
return new Promise((resolve, reject) => {
img.onload = () => {
//canvas基本配置
const canvas = document.createElement('canvas');
canvas.width = img.width;
canvas.height = img.height;
const ctx = canvas.getContext('2d');
ctx.drawImage(img, 0, 0, canvas.width, canvas.height);
resolve({
success: true,
//canvas.toDataURL的方法将图片的绝对路径转换为base64编码
base64: canvas.toDataURL()
});
};
img.onerror = () => {
reject({ success: false });
};
});
}
//调用
getBase64Image(
'https://thirdwx.qlogo.cn/mmopen/g3MonUZtNHkdmzicIlibx6iaFqAc56vxLSUfpb6n5WKSYVY0ChQKkiaJSgQ1dZuTOgvLLrhJbERQQ4eMsv84eavHiaiceqxibJxCfHe/46'
).then(res => {
console.log(res); // {success : true, base64 :'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAC4A…etGgbgs19tVBD5K/+l/8/4jpK+RseVK4AAAAASUVORK5CYII='}
});
如果你有一个跨源图像,你可以将它复制到画布上,但这“污点”的画布,阻止你阅读它(所以你不能“偷”图像,例如从内部网站的网站本身没有访问)。但是,通过使用 CORS,存储图像的服务器可以告诉浏览器允许跨源访问,因此您可以通过画布访问图像数据。
anonymous:如果使用这个值的话就会在请求中的 header 中的带上 Origin 属性,但请求不会带上 cookie 和其他的一些认证信息。 use-credentials:这个就同时会在跨域请求中带上 cookie 和其他的一些认证信息。 如果只写个空 crossOrigin='',则和 anonymous 效果一样