【发布时间】:2013-09-16 14:02:23
【问题描述】:
我有一个函数,它接受一个 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.toDataURL 将失败。
-
我已经设置好了,所以我可以使用 CORS 从相关域中读取图像。
-
只是好奇...你为什么要通过画布运行 img?难道你不能用 .src='somedomain.s3.amazonaws.com/someimg.png' 创建一个 html img-element
-
你的 img.crossOrigin 应该是 img.crossOrigin="anonymous"
-
它与一些图像处理一起使用,其中图像可能会被处理,然后可能会再次处理其结果。所以第一眼把它们变成数据url很方便。我没有收到任何安全错误。那是我最后一次头痛。
标签: javascript html canvas data-url