【问题标题】:Android: How to Display a Bitmap in a WebView?Android:如何在 WebView 中显示位图?
【发布时间】:2012-06-06 15:08:48
【问题描述】:

由于内置的​​平移和缩放功能,我正在使用 WebView 来显示类似地图的图像。但是,我需要在地图图像上的某些点覆盖一些其他信息(标记等),并显示所有这些。

所以我将我的底图图像作为位图,并将我的其他图像覆盖在上面(使用 Canvas 和更多位图),给我一个包含所有信息的最终位图。因为我需要在运行时编辑图像,所以我不能使用预制文件。实现位图的叠加不是问题,问题是我不知道如何使用平移和缩放功能轻松显示生成的图像。

有没有办法使用 WebView 显示位图?或者有什么其他建议?

【问题讨论】:

标签: android webview bitmap


【解决方案1】:

使用来自 itsrajesh4uguys 的链接,我创建了这段代码 sn-p:

// Desired Bitmap and the html code, where you want to place it
Bitmap bitmap = YOUR_BITMAP;
String html="<html><body><img src='{IMAGE_PLACEHOLDER}' /></body></html>";

// Convert bitmap to Base64 encoded image for web
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.PNG, 100, byteArrayOutputStream);
byte[] byteArray = byteArrayOutputStream.toByteArray();
String imgageBase64 = Base64.encodeToString(byteArray, Base64.DEFAULT);
    String image = "data:image/png;base64," + imgageBase64;

// Use image for the img src parameter in your html and load to webview
html = html.replace("{IMAGE_PLACEHOLDER}", image);
webview.loadDataWithBaseURL("file:///android_asset/", html, "text/html", "utf-8", "");

【讨论】:

  • 感谢您的评论。你说的对。我在答案中添加了一行来解释解决方案。
  • 我认为基本网址无关紧要,它也适用于 webview.loadData
  • 这里,使用base-64编码,没有风险;但是知道这一点很有用,否则 loadDataWithBaseURL 是要调用的函数,即使基本 url 不相关(并且可以有效地作为 null 传递)。见线程stackoverflow.com/questions/12332929/…
  • 如何使用 RoundedBitmapDrawable 做同样的事情?
  • 如果有人有解决方案来避免 web 视图,然后再对位图进行下采样,我很想听听。这似乎是我们无法控制的
【解决方案2】:

如果你想在 webview 中加载图像,你不需要占位符

你可以直接在webview中加载dataurl。 例如:

ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.PNG, 100, byteArrayOutputStream);
byte[] byteArray = byteArrayOutputStream.toByteArray();
String imgageBase64 = Base64.encodeToString(byteArray, Base64.DEFAULT);
    String dataURL= "data:image/png;base64," + imgageBase64;

webview.loadUrl(dataURL); //pass the bitmap base64 dataurl in URL parameter

希望对其他人有所帮助! :-)

【讨论】:

  • 它显示了 pdf,但亮度似乎有问题。就我而言,它太暗了。
【解决方案3】:

通常在 webview 中,我们可以使用 html 标签设置图像。这不会产生任何问题。

以任何方式使用此链接获取示例问题和答案

Why Bitmap to Base64 String showing black background on webview in android?

【讨论】:

    【解决方案4】:

    答案似乎是:不,在 web 视图中显示本地位图对象而不将其保存到文件是不可能的。

    【讨论】:

    • 错误。创建 Img 标记以显示图像,例如带有内联图像的 html 电子邮件。使用 标签,但 src 不是 url 而是 base64 编码的图像数据。 img src 仍然可以通过 javascript 进行修改。
    • 可以加载和显示位图。检查 teepee 索尼的答案。它解释了如何做到这一点。
    【解决方案5】:

    你不需要位图,只要它的名字就足够了。请尝试以下操作:

    html = "<html><img src=\"" + imageUrl
                            + "\"></html>";
    final WebView webView = (WebView) view
                        .findViewById(R.id.yourWebView);
    wvImageView.getSettings().setJavaScriptEnabled(true);
    wvImageView.loadDataWithBaseURL("", html, "text/html", "utf-8", "");
    

    这应该会在 WebView 上显示您的图像。 如果你想提供缩放功能,试试这个:

    webView.getSettings().setSupportZoom(true);
    webView.getSettings().setBuiltInZoomControls(true);
    

    【讨论】:

    • 此代码是否用于显示从 URL 获取的图像?这不是我想要做的。
    • 以上代码只需要图像的完全限定路径。尝试给出 imagePath 并检查它是否有效。
    • 所以我需要将修改后的位图保存为文件,然后再读取?
    • 您不必保存文件,只需要获取图像的完整路径即可。
    • 当您在地图图像上叠加许多图像时,您如何创建这些图像的位图以及如何将这些图像放在地图图像上?如果您可以创建图像的位图,您也可以获得它的名称。所以你只需要检索它的名字。但我还是想问你,你将如何将图像放在地图图像上?这对我来说也是一个非常好的信息。
    猜你喜欢
    • 1970-01-01
    • 2012-05-28
    • 1970-01-01
    • 2011-06-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-25
    • 2013-01-22
    相关资源
    最近更新 更多