【问题标题】:Android: pixel quality reduction in Images loaded in WebViewAndroid:WebView 中加载的图像中的像素质量降低
【发布时间】: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 image html canvas webview


【解决方案1】:

如果超出某个内存使用阈值,Android 会无条件重新采样图像并降低质量。
https://android.googlesource.com/platform/external/webkit/+/android-3.2.4_r1/WebCore/platform/graphics/android/ImageSourceAndroid.cpp

无法完整访问原始图像数据。

我向 android-developers Google Group 发布了一个关于此的问题,并请求提供某种标志以退出此行为。

同时,如果您正在考虑开发 HTML5 网络应用程序并且您可能使用大图像,您只需在服务器端通过切片对它们进行预处理,将较小的图像发送到设备,然后使用或放置重建原始图像容器元素内有许多标签。

另一种选择是“手动”加载图像,方法是编写一个直接将图像加载到的 PNG 解码器,绕过 ImageSourceAndroid 类。

【讨论】:

    【解决方案2】:

    这个问题很老,所以可能几乎没有什么改变,但如果您在使用 WebView 时遇到图像质量问题,请考虑将您的图像转换为 PNG 格式。

    不知何故,当我加载图像的 jpeg 版本时质量很低,而以相同的分辨率加载 png 图像时质量却很高。

    【讨论】:

    • 相同质量的结果,对我来说,扩展名是 JPEG 还是 PNG。
    猜你喜欢
    • 2019-08-23
    • 2017-08-03
    • 1970-01-01
    • 1970-01-01
    • 2016-06-06
    • 2010-11-12
    • 2012-11-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多