在Chrome中加载大型图片时出现“Aw Snap”错误

12

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

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

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

一切正常工作,对于小图片没有问题。但对于大图片[假设大于9000 x 7000像素],它会抛出“Aw Snap”蓝屏错误。 有时它可以成功加载图像,但通过在其上移动鼠标、移动滚动条或画线来抛出“Aw Snap”错误。

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

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

使用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);
    }
}

1
你试过去Chrome的设置->高级选项->隐私,然后取消勾选“预加载资源以加快页面加载速度”吗? - Markai
1
投票关闭为“过于宽泛”,我们在这里只能猜测。我建议将此报告为错误提交到crbug.com - user1693593
1
正如K3N所说,我们只能猜测为什么你的代码在重负载下失败(可能是因为太重了!)。我建议重构你的应用程序,使用更接近显示大小而不是过大的图像。 - markE
1
很难说,因为问题不完整,没有测试图像。没有这个,我的猜测通常是使用base64 URI而不是指向文件/ blob的url引起的问题。Chrome有一个URI大小限制。如果是这种情况,请查看如何创建一个临时URL,该URL将通过base64字符串从blob创建的ram对象指向:https://dev59.com/UGQo5IYBdhLWcg3wMs-2 - Radio
3个回答

9
"Aw Snap"的意思是操作系统已经终止了Chrome进程。这通常是因为您的操作系统认为Chrome做错了某些事情(例如,当它分配了太多内存、存在内存损坏或在系统补丁后共享库过时时)。
可能是由于Chrome需要太多内存来显示这样巨大的图像。解决方法是将图像切成小块("平铺"),只显示屏幕上可见的那些瓷砖。
要确定原因,您可以从命令行运行Chrome。有时,当部分进程崩溃时,它会在控制台上打印更详细的错误消息。
您还应该尝试将最新的(安全)补丁应用于您的操作系统,获取最新版本的Chrome并重新启动以确保不是一个小故障。在我的电脑(16GB RAM,1GB视频RAM)上,我可以打开一个19,000 x 19,000的PNG图像而不会出现错误,只需要大约20秒才能渲染完整个图像。

1
平铺将是一种选择,但我的图像大小甚至不到最大尺寸的一半。请查看此链接:https://dev59.com/0m025IYBdhLWcg3wUEOP - Derin
1
这只是画布元素本身的最大尺寸。错误信息“Aw Snap”表示您的操作系统因某种原因终止了Chrome。有许多其他元素会影响此错误:您打开了多少其他选项卡,您的操作系统要为每个Chrome进程提供多少内存,有多少选项卡合并到单个进程中,您的图形卡还有多少可用空间。 - Aaron Digulla
1
@Derin:尝试关闭所有其他标签页和应用程序,这有帮助吗? - Aaron Digulla
我已经尝试过了,但没有帮助。另一个有趣的事情是,在“Mac Chrome”中没有失败。唯一的问题是“Windows Chrome”。 - Derin
http://superuser.com/questions/475898/why-does-chrome-crash-at-around-1-5-gb-of-memory-usage - Derin
说句题外话,在Chrome中,你可以启用垃圾回收标志。使用--js-flags="--expose-gc"命令,并调用window.gc()函数。 - Squiggs.

0

0

进入 Google Chrome 快捷方式的属性,将 --no-sandbox 添加到目标字段的末尾,然后点击应用。

enter image description here


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