我有一个函数,它需要一个img元素并返回一个数据url。这工作像7/10次,并返回一个空白图像3/10次。我通过浏览器(chrome)查看创建的数据url并使用相同的图像,所以我知道这个函数返回的是破碎的图像。任何人都可以发现原因画布到数据网址无法正常工作
function imgToDataURL(img) {
var canvas = document.createElement('canvas');
canvas.width = img.naturalWidth;
canvas.height = img.naturalHeight;
var c = canvas.getContext('2d');
c.drawImage(img, 0, 0);
dataurl = canvas.toDataURL();
return dataurl;
}
$(function() {
img = new Image();
img.crossOrigin = '';
img.onload = function() {
newimg = new Image();
newimg.onload = function() {
document.body.appendChild(newimg);
}
newimg.src = imgToDataURL(img);
}
img.src = 'https://somedomain.s3.amazonaws.com/someimg.png';
});
这个例子大部分时间都在工作,但有时候会以一个大的白色矩形而不是图像结束。
注意,出于安全考虑,帆布源图像必须在同一个域做为所服务在页面主办。因此,如果您的img.src是其他域,并且您将其他域的图像写入canvas,那么canvas.toDataURL将失败。 – markE
我已经设置好了,所以我可以使用CORS从有问题的域读取图像。 – user2073343
只是好奇......你为什么要通过画布运行IMG?难道你不能只用.src创建一个html img元素='https://somedomain.s3.amazonaws.com/someimg.png' – markE