【发布时间】:2015-12-29 02:21:17
【问题描述】:
我正在尝试在得到 dataURL() 之前在画布上绘制图像,但返回的数据就像是空的。
当我在控制台中查看时,我看到字符串中有很多 A : ("data:image/png;base64,iVBO..some random chars... bQhfoAAAAAAAAAA... a lot of A ...AAAASUVORK5CYII=")
当我尝试将画布附加到文档时,也没有绘制任何内容,并且我没有在控制台中引发任何错误。
这里有什么问题?
这是我的代码:
var img = new Image();
img.src = "http://somerandomWebsite/picture.png";
var canvas = document.createElement('canvas');
canvas.width = img.width;
canvas.height = img.height;
var context = canvas.getContext('2d');
context.drawImage(img, 0,0); // this doesn't seem to work
var dataURL = canvas.toDataURL(); // this will give me a lot of "A"
doSomething(dataURL);
此外,在进行快速刷新时,图像会正确绘制到画布上,但我在控制台中收到一条错误消息,dataURL 为空。
Firefox 中的消息是:“SecurityError: The operation is insecure.”,
在 Chrome 中是 “未捕获的 SecurityError:无法在 'HTMLCanvasElement' 上执行 'toDataURL':可能无法导出受污染的画布。”,
而在 IE 上我只得到 "SecurityError"。
什么意思?
【问题讨论】:
-
这篇文章旨在成为我们了解这个特定问题的 20 周左右的规范文章。请告诉我是否可以改进。
-
不只是在对图像做任何事情之前加载图像更相关吗?如果您认为参考 toDataURL 有用,您应该提及(可能的)CORS 问题。无论如何 +1 为维基的想法/努力。
-
@GameAlchemist 你是对的,我试图将这两个问题结合起来,因为它们非常相似并且经常成对出现。我在答案中谈到了CORS问题。不知道搜索引擎会如何处理这个问题,也许我应该在问题中添加“画布被污染”消息错误。无论如何,我要求将问题也转换为wiki,这样您就可以编辑它。
标签: javascript canvas html5-canvas