Как загрузить изображение, хранящееся в байтовом массиве, в WebView? - PullRequest
7 голосов
/ 21 декабря 2010

все!Я сжал много картинок в файл "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, потому что эти два пути будут очень медленными.

Ответы [ 2 ]

6 голосов
/ 25 февраля 2011

Насколько я знаю, невозможно выполнить все эти три требования. Кодирование Base64 и загрузка его в тег изображения напрямую, вероятно, является лучшим выбором, если вы не хотите записывать его в хранилище, хотя вы все равно можете записать его во внутреннее хранилище и показать в веб-просмотре.

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");
}
1 голос
/ 23 февраля 2012

Я рекомендую использовать встраиваемый прослушиватель HTTP в вашем приложении, где прослушивать определенный порт (например, 8001), а затем в HTML-странице ссылаться на изображения для слушателя. Например, поиск Test.png будет выглядеть примерно так:

http://localhost:8001/Test.png

Этот запрос попадет в ваш прослушиватель, где вы сможете просмотреть свой zip-файл или базу данных, а затем вернуть поток байтов в поток ответов HTTP!

Я действительно рекомендую вам взглянуть на NanoHTTPD (http://elonen.iki.fi/code/nanohttpd/) и попробовать реализовать собственный метод подачи для вашей цели.

Надеюсь, это поможет: -)

...