【发布时间】:2011-10-01 16:58:42
【问题描述】:
我正在为移动浏览器构建 Javascript 应用程序(不是作为原生应用程序包装的)。
我注意到,如果图像尺寸超过某个阈值(宽度超过 1400 像素左右),Android(经过测试的 2.3 模拟器和 Galaxy S 设备)会降低加载图像的质量。这使得无法加载大的位图图像(2000 x 2000 像素)而质量不可用。
我对此进行了测试
加载一张大图像并将其绘制在 - 我得到了像素垃圾。如果我使用 lineTo() 绘制网格线,它们具有完美的质量,那么坏的肯定在图像像素数据中
将大图像切成 100 x 100 切片并将它们绘制到画布上 - 这是我发现的唯一不会降低质量的方法。但是,切片很麻烦,增加了预处理图像的额外步骤,并且页面加载时间受到影响
我测试了使用新的 Image() 对象、标签和 CSS 背景来加载图像:一切都受到质量下降的影响,所以我怀疑问题是图像加载器本身
我还尝试了所有的 CSS 图像渲染https://developer.mozilla.org/En/CSS/Image-rendering - 不走运
Viewport 标签似乎对图像加载没有影响 - 当您尝试触摸加载的像素数据时,数据已经是垃圾。我尝试了 Android 的 SDK 文档 http://developer.android.com/reference/android/webkit/WebView.html
中建议的所有可能值
还测试了移动版 Firefox、桌面浏览器、iOS:一切都很好。
那么,这是怎么回事 - Android WebView 根本无法加载大图像?
(这里挂着安卓机器人的笑脸)
【问题讨论】:
-
Android 上的应用程序每个进程的内存限制为 16-24mb。 ARGB8888 中 2000x2000px 的图像将使用 ~15mb。我假设浏览器只是试图避免内存不足。以防万一您想深入了解这里的代码:android.git.kernel.org/?p=platform/packages/apps/…
-
我的设备有 1 GB 的内存,并且没有打开其他应用程序。如果真是这样,那确实是非常可悲的平台设计。
-
这里也没有意义,因为我可以创建我想要的
-
我认为它在 WebKit 源代码树中称为图像子采样:android.git.kernel.org/?p=platform/external/…
标签: android image html canvas webview