html Android:WebView中加载的图像的像素质量降低

zxlwwiss  于 2023-06-27  发布在  Android
关注(0)|答案(3)|浏览(190)

我正在为移动的浏览器构建JavaScript应用程序(而不是 Package 为本地应用程序)。
我注意到,Android(测试2.3模拟器和Galaxy S设备)如果图像尺寸超过一定的阈值(宽度超过1400像素左右),则会降低加载图像的质量。这使得加载大位图图像(2000 x 2000 px)时质量无法使用。
我测试了这个

  • 加载一个大的图像并在-我得到了像素垃圾。如果我用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机器人的笑脸)

weylhg0b

weylhg0b1#

Android无条件地重新采样图像,并降低质量,如果超过一定的阈值的内存使用。
https://android.googlesource.com/platform/external/webkit/+/android-3.2.4_r1/WebCore/platform/graphics/android/ImageSourceAndroid.cpp
没有办法完整地访问原始图像数据。
我向Android开发者Google Group提出了一个关于这个问题的问题,并善意地要求提供某种标志来选择退出这种行为。
同时,如果您正在考虑开发HTML5 Web应用程序,并且您可能会使用大图像,则只需通过切片在服务器端对它们进行预处理,将较小的图像发送到设备,然后使用或将许多标记放入容器元素中重建原始图像。
另一种选择是通过编写PNG解码器来“手动”加载图像,该解码器直接将图像加载到,绕过ImageSourceAndroid类。

bhmjp9jg

bhmjp9jg2#

使用以下设置:

webView.settings.apply {
                javaScriptEnabled = true
                domStorageEnabled = true
                useWideViewPort = true
                mediaPlaybackRequiresUserGesture = false
                loadWithOverviewMode = true
            }
            webView.isVerticalScrollBarEnabled = true
            webView.isHorizontalScrollBarEnabled = true
ki0zmccv

ki0zmccv3#

这个问题是旧的,所以可能没有什么变化,但如果你有图像质量问题与WebView然后考虑将您的图像转换为PNG格式。
不知何故,当我加载jpeg版本的图像质量低,而加载相同分辨率的png图像质量高。

相关问题