在chrome中加载大图像时出现“Aw Snap”错误

时间:2015-05-19 08:09:15

标签: javascript html5 image google-chrome canvas

我正在尝试从服务器加载图片。

图像在服务器上动态创建,然后将名称[包括相对路径]传递给客户端以加载到画布中。

有3层画布,设置相同大小的图像并将图像加载到一个画布。

小图像的一切正常。 但对于大图像,[假设超过9000 x 7000像素]它会抛出“Aw Snap”蓝屏错误。 有时它设法加载图像但是通过在画布上移动鼠标,移动滚动条或在其上画一条线来抛出“Aw Snap”错误。

我增加了--disk-cache-size但没有帮助。

即使设置这些值也没有帮助[--disable-accelerated-2d-canvas, - blacklist-accelerated-compositing, - black-webgl, - disable-accelerated-compositing, - disable-加速层]

使用IE和Safari测试 - 工作正常但有些延迟。

发表您的想法和提示。任何帮助表示赞赏。

这是我的代码

function LoadImage(imageUrl) {
    try {
        var image_View = document.getElementById("imageView");
        var image_Temp = document.getElementById("imageTemp");
        var image_Tempt = document.getElementById("imageTempt");
        var ctx = image_View.getContext("2d");

        var img = new Image();
        img.onerror = function() {
            alert('The image could not be loaded.');
        }
        img.onload = function() {
            image_View.width = img.width;
            image_View.height = img.height;
            image_Temp.width = img.width;
            image_Temp.height = img.height;
            image_Tempt.width = img.width;
            image_Tempt.height = img.height;

            ctx.clearRect(0, 0, image_View.width, image_View.height);
            ctx.drawImage(img, 1, 1, img.width, img.height);
        }

        img.src = imageUrl;
    }
    catch (err) {
        alert(err.message);
    }
}

3 个答案:

答案 0 :(得分:9)

“Aw Snap”表示操作系统终止了此标签的Chrome进程。当您的操作系统认为Chrome出错时(例如,在系统修补程序之后分配了太多内存,内存损坏,过时的共享库)时会发生这种情况。

Chrome可能需要太多内存来显示如此巨大的图像。解决方法是将图像切割成碎片(“平铺”),然后只显示屏幕上可见的那些瓷砖。

要确定,您可以从命令行运行Chrome。有时,它会在部分崩溃时在控制台上打印更多描述性错误消息。

您还应该尝试将最新的(安全)补丁应用到您的操作系统,获取最新的Chrome并重新启动以确保它不是故障。在我的电脑上(16GB RAM,1GB视频RAM),我可以打开一个19'000x19'000的PNG图像,没有错误,帧渲染它只需要大约20秒。

答案 1 :(得分:0)

你可以调试" Aw Snap"错误启用Chrome's logging

要启用,请使用以下命令行标记启动Chrome:

--enable-logging --v=1

然后打开Chrome's user data directory以找到该文件。

答案 2 :(得分:0)

转到Google chrome快捷方式的属性,将--no-sandbox添加到目标字段的末尾,然后单击“应用”

enter image description here