Я пытаюсь найти решение самостоятельно (JS ES6), но найти только-частично. Мы можем загружать img из no-CORS support src в canvas, но браузерные переключатели переходят в режим taint , который не позволяет нам звонить toDataURL
(и любой другой доступ к контенту).
Таким образом, единственный способ преодолеть это препятствие - создать прокси-сервер (например, на PHP), который будет иметь CORS 'on', и он будет загружать изображения для данного URL-адреса и отправлять обратно в наше приложение в JS. Я нашел бесплатный сервер https://cors-anywhere.herokuapp.com, который мы можем использовать для разработки тестов. Ниже приведен полный функциональный код, который возвращает dataUri из заданного URL-адреса изображения:
loadImgAsBase64(url, callback)
{
let canvas = document.createElement('CANVAS');
let img = document.createElement('img');
img.setAttribute('crossorigin', 'anonymous');
img.src = 'https://cors-anywhere.herokuapp.com/'+url;
img.onload = () =>
{
canvas.height = img.height;
canvas.width = img.width;
let context = canvas.getContext('2d');
context.drawImage(img,0,0);
let dataURL = canvas.toDataURL('image/png');
canvas = null;
callback(dataURL);
};
}
И мы можем это назвать (es6):
let url='https://static.pexels.com/photos/87293/pexels-photo-87293.jpeg';
this.loadImgAsBase64(url, (dataURL) => { console.log('imgData:',dataURL) });
Thats all :) (я тестировал его только на хроме)