HTML5画布中的JavaScript getImageData

5

我快要抓狂了!我已经让它工作了,认为“我可以不保存这个版本”,然后我……破坏了“构建”。

似乎是这一行代码 myImageData = context.getImageData(0, 0, canvas.width, canvas.height); 引起的问题,因为它之前可以弹出警告,但之后就不行了。

图像本身正在加载。

欢迎任何建议^_^ 我已经到达了极限,很快就会因为自责而得到 RSI(重复应力损伤)。

var myImageData;

var image_var = new Image();
image_var.onload  = function () {
    canvas.width  = image_var.width;
    canvas.height = image_var.height;
    context.drawImage(image_var, 0, 0, image_var.width, image_var.height);
    myImageData   = context.getImageData(0, 0, canvas.width, canvas.height);
    alert('');
}
image_var.src = "example1.jpeg";

你确定图片来源没问题吗?你有注意到 Firebug 的控制台选项卡里是否有任何错误信息吗? - user372551
我刚从oxX换成ubuntu,甚至还没有安装firebug!这有多傻啊?我正在看看如果我再次尝试在本地运行它会抛出什么错误 - 我会告诉你的。 - hugh jackson
如预期!“安全错误”代码:“1000”。 - hugh jackson
这是跨域错误。请参见此处:http://disturbmedia.com/blog/post/cross-domain-getimagedata-api-using-google-app-engine/ - james.garriss
2个回答

6

将以下代码添加到您的实际代码中,Firefox允许您在本地工作。

netscape.security.PrivilegeManager.enablePrivilege("UniversalBrowserRead");

它实际上是做什么的?

当脚本调用此函数时,如果签名有效或启用了代码库主体,则可以授予扩展特权。如果用户以前没有访问过此主体,则会出现对话框询问用户是否要接受签名代码。与Communicator 4.x不同,Mozilla不会显示详细的Java授权对话框,而是一个简单的对话框询问主体是否可信。用户可以接受或拒绝,并允许浏览器记住他们的选择。如第二个示例所示,可能会同时请求两个特权,因此只出现一个对话框。

特权仅在请求函数的范围内授予。该范围包括由请求函数调用的任何函数。当脚本离开请求函数时,特权不再适用。

您可以在此处阅读更多信息。

这里有一个演示alt text


非常感谢,伙计!实际上我几个小时前就偶然发现并实现了这个功能 - 应该在这里更新一下,但我忘记了。 - hugh jackson
很高兴收到你的消息。祝你有一个愉快的一天! - user372551

0

我找到了一个解决方案 - 问题在于我试图读取本地文件(即在我的计算机上),这些文件没有与其关联的域名(显然,在此情况下,本地IP不计入其中)。为了保护在线内容利益相关人的安全,W3C + 浏览器已经使getImageData()无法在存储在JavaScript所在的服务器之外的文件上工作。

不幸的是,它将本地文件视为无域名文件,因此安全限制也适用。我正在寻找克服这个问题的方法(目前正在查看HTML5中的appCache和websql,可能会或可能不会有所收获)。我希望我的Web应用程序用户不必上传他们正在使用的材料(这样他们可以离线工作,并且出于安全原因)。欢迎任何建议!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接