如何将存储在字节数组中的图像加载到WebView?

大家! 我已经压缩了很多图片到“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文件中的图片并获取图片的字节stream,然后将图像从字节stream加载到WebView。

  2. 我不想从zip文件解压图片,然后将其保存到SD卡,然后加载它。

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

Solutions Collecting From Web of "如何将存储在字节数组中的图像加载到WebView?"

据我所知,没有办法满足这三个要求。 Base64对它进行编码并直接加载到image标签中,如果你不想把它写入存储,可能是你最好的select,尽pipe你仍然可以把它写到内部存储并在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"); } 

我build议在你的应用程序中使用可embedded的HTTP监听器,监听特定的端口(例如8001),然后在你的HTML页面参考图像中向监听器使用。 例如,寻找Test.png会是这样的:

HTTP://本地主机:8001 / Test.png

这个请求将最终在你的监听器中,你可以查看你的压缩文件或数据库,然后返回字节stream到HTTP响应stream!

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

我希望这有帮助 :-)