Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/97.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Firefox 使用图像覆盖避免openlayers中的大量内存使用_Firefox_Memory Management_Openlayers - Fatal编程技术网

Firefox 使用图像覆盖避免openlayers中的大量内存使用

Firefox 使用图像覆盖避免openlayers中的大量内存使用,firefox,memory-management,openlayers,Firefox,Memory Management,Openlayers,我正在建立一个地图系统,需要将一幅大图像(本机13K像素宽,20K像素高)覆盖在美国大约20公里的区域上。我将jpg格式的图像文件大小降低到23MB,并将其快速加载到地图上。我可以放大和缩小,看起来很棒。它甚至正好位于我需要它的地方(地理位置)。然而,这个25MB的文件导致Firefox额外消耗1GB的内存!!!我在Firefox上使用内存重启扩展,没有图像覆盖,内存使用量约为360 MB到400 MB,这似乎是正常使用、浏览其他网站等的标准。但当我添加图像层时,内存使用量跃升到1.4 GB。我

我正在建立一个地图系统,需要将一幅大图像(本机13K像素宽,20K像素高)覆盖在美国大约20公里的区域上。我将jpg格式的图像文件大小降低到23MB,并将其快速加载到地图上。我可以放大和缩小,看起来很棒。它甚至正好位于我需要它的地方(地理位置)。然而,这个25MB的文件导致Firefox额外消耗1GB的内存!!!我在Firefox上使用内存重启扩展,没有图像覆盖,内存使用量约为360 MB到400 MB,这似乎是正常使用、浏览其他网站等的标准。但当我添加图像层时,内存使用量跃升到1.4 GB。我完全无法解释为什么会这样以及如何解决它。任何想法都将不胜感激


Andrew

该文件作为JPEG仅占23MB。但是,JPEG格式是压缩的,任何想要实际渲染图像的程序(如FireFox)都必须解压缩图像并将每个像素存储在内存中。您有13k x 20k像素,这意味着有2600万像素。图:每像素至少有3字节的颜色信息,即780 MB。它可能使用4个字节,使每个像素在字边界对齐,即1040 MB

至于如何修复它,我不知道你是否可以,除了缩小图像大小。如果图像只包含少量颜色(例如,用几种原色绘制的简单图表),您可以将其保存为使用索引颜色的某种格式,然后FireFox可以使用更少的每像素内存进行渲染。这完全取决于渲染代码

根据你正在做的事情,也许你可以把整个图像设置为较低的分辨率,然后当用户放大时,他们会得到一个覆盖较少区域的高分辨率图像

编辑:澄清最后一点:现在你有完整的照片分辨率,这很简单,但需要大量的内存。另一种方法是降低整个照片的分辨率(最大预期屏幕分辨率),这将占用更少的内存;然后,当用户放大时,您可以获得全分辨率的图像,而不是整个图像-只是放大的部分(同样需要更少的内存)


我可以想到两种方法:将大图像分解成“分片”,然后加载所需的图像(不确定效果如何),或者使用ImageMagick之类的工具动态构建较小的图像。如果这样做的话,您可能希望使用缓存,并且您可能需要编写一个小的“请稍候”消息,以便在构建过程中显示,因为处理如此大的图像可能需要几秒钟。

谢谢Tom。基本上,该图像是我们客户财产的一个假想视图。它相当大,大约10公里乘20公里(我现在不知道确切的尺寸),但它很大。这是一个黑白图像(灰度,因为它是一张照片)。它最初是一个288MB的tiff文件,我将其转换为jpg。那么,使用tiff文件并忍受较长的加载时间会更好,还是会发生同样的事情?我曾考虑尝试将其拆分为多个部分,但我想,所有这些加起来的数量都是一样的。其中一个大问题是,客户需要能够每隔一段时间上传一张最新的ariel照片,因为他们的景观经常发生变化——新的“道路”等等。因此,每次他们有一张更新的照片时,就需要这样做。如果有更好的办法,我会喜欢你的想法。谢谢大家!@安德鲁·克里斯滕森:如果你不丢失重要的细节,最好将tiff转换成jpg;至少存储和加载的信息会更少。请看修改后的答案,我们将其分解。谢谢你的建议。我将研究这些选择。希望OL能被告知“嘿,把这个大图像做成瓷砖,只显示可视空间中包含的像素”之类的话。“哦,好吧,一个人可以做梦……”安德烈·克里斯滕森:我一直在研究地理信息系统,显然这是一种标准技术;他们被称为。