【问题标题】:Image size limitations in mobile safari?移动 Safari 中的图像大小限制?
【发布时间】:2011-10-07 05:44:08
【问题描述】:

我正在使用 PhoneGap 开发 iOS 应用程序。我遇到了一个烦人的问题,我的一些图像没有加载。认为这是我在交换图像时玩的缓存问题。

我终于发现问题与我的图像高度有关。经过大量的试验和错误后,我发现超过 7864px 的图像不会加载到 iPad 模拟器或 iPad 本身中。它将在 Safari 中正常加载。这不是文件大小限制,因为它们只有 45k 大小,我正在其他地方加载大小为 700k 的图像而没有问题。

有人遇到过这种情况吗?我在移动 Safari 中找不到任何记录在案的图像尺寸限制。如果有限制,了解它们会很方便。

【问题讨论】:

  • Opera Mini 以全分辨率显示图像。

标签: ios image cordova mobile-safari image-size


【解决方案1】:

对于原生应用程序,Apple 表示图像大于 2048x2048 1024x1024 are to be avoided,应该分解成更小的图像。这里的问题不是磁盘上的文件大小,而是内存中的大小:图像必须被解码并转换为“平面”表示。

让我们做一些数学运算:假设图像为 5000x5000 像素,具有 8 位 RGB。这意味着每个像素占用 3 个字节:

5,000 * 5,000 * 3 = 75,000,000(大约 71.5 MiB)

所以你看到你看似很小的图像真的很快就填满了内存。 iOS 现在不能在内存压力下丢弃部分,要么是整个图像,要么什么都没有。

您唯一的解决方案是将图像分解成更小的部分。然后,iOS 可以从内存中删除不再可见的图像(我怀疑图像如此巨大以至于所有部分都始终可见)。

【讨论】:

  • 这似乎是指原生 UI 渲染。这对 Mobile Safari (PhoneGap) 也适用吗?我可以克服这个限制,但这意味着我需要停止在我的 CSS 中使用 Sprites——这是在其他地方推荐的。所以我还是有点迷茫。 ;)
  • 我引用了本机应用程序文档,因为我没有找到更好的东西。尽管如此,无论是原生应用程序还是 Safari,问题都是一样的:一张巨大的图片占用了大量的内存,并且操作系统无法清除其中的一部分(AFAIK)。但是,如果您将一个巨大的图像与许多较小的图像平铺,那么清除那些目前不可见的图像是没有问题的。至少 Apple 是这么说的,我们原生开发者应该这样做。
  • 所以我无法加载维基百科的 13,000 像素全景图!
猜你喜欢
  • 2011-08-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-07
  • 2013-04-05
  • 1970-01-01
相关资源
最近更新 更多