【问题标题】:How to load an image stored in a byte array to WebView?如何将存储在字节数组中的图像加载到 WebView?
【发布时间】:2011-05-28 14:19:00
【问题描述】:

大家!我已将大量图片压缩为“pictures.zip”文件。我想将其中一张图片加载到这样的 WebView 中:

WebView wv = (WebView)findViewById(R.id.WebView01);
wv.loadDataWithBaseURL(null,"<img src=\"abc.jpg\">", "text/html", "UTF-8", null);

这里的“abc.jpg”是一张已经压缩成pictures.zip文件的图片。

  1. 我只是想从zip文件中解压图片并得到 图片的字节流,然后 将图像加载到 WebView 字节流。

  2. 我不想解压 图片来自 zip 文件,然后 保存到 sdcard 然后加载。

  3. 此外,我不想编码 将图片的字节转换为base64,然后 将图像加载到 WebView 要么,因为这两种方式将 非常慢。

【问题讨论】:

  • @user549380:首先,为什么需要使用 WebView?其次,您的逻辑不正确 - 使用 "" 意味着引用某种本地或其他类型的“文件”。据我目前所读,您无法使用 android 创建“内存中”文件,如果可以的话,我看不出 WebView 如何访问它们。
  • 著名软件“mdict”可以从其资源文件(.mdd 文件)中加载图像,而无需将图像存储到硬盘中。它只是使用 之类的 html 来加载压缩为 .mdd 文件的 abc.jpg。
  • 展示 mdict 如何使用 的示例,它可能会进一步解释。
  • 通过 [Overriding webviewClient][1] 可以实现,但需要 android 级别 10+ [1]:stackoverflow.com/questions/4780899/…

标签: android webview bytearray


【解决方案1】:

据我所知,没有办法同时满足这三个要求。如果您不想将其写入存储,Base64 编码并将其直接加载到图像标签中可能是您​​最好的选择,尽管您仍然可以将其写入内部存储并在 webview 中显示。

private static final String HTML_FORMAT = "<img src=\"data:image/jpeg;base64,%1$s\" />";

private static void openJpeg(WebView web, byte[] image)
{
    String b64Image = Base64.encode(image, Base64.DEFAULT);
    String html = String.format(HTML_FORMAT, b64Image);
    web.loadData(html, "text/html", "utf-8");
}

【讨论】:

  • 我想指出,你可以通过直接给 loadData() base64 来进一步缩短(可能会提高性能); String b64Image = Base64.encodeToString(image, Base64.DEFAULT);web.loadData(b64Image, "image/jpeg", "base64");
【解决方案2】:

我建议在您的应用程序中使用可嵌入的 HTTP 侦听器来侦听特定端口(例如 8001),然后在您的 HTML 页面中将图像引用到您的侦听器。例如寻找 Test.png 会是这样的:

http://localhost:8001/Test.png

这个请求将在您的监听器中结束,您可以在其中查看您的 zip 文件或数据库,然后将字节流返回到 HTTP 响应流!

我真的建议你看看 NanoHTTPD (http://elonen.iki.fi/code/nanohttpd/) 并尝试为你的目标实现自定义服务方法。

我希望这会有所帮助:-)

【讨论】:

  • 这在某些情况下是不错的选择,但访问 localhost 是另一个令人头疼的问题,它不像 PC 那样工作
猜你喜欢
  • 2022-06-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多