2010-12-21 4 views
7

모두! 나는 많은 그림을 "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 파일의 영상 압축을 풀고 그림의 바이트 스트림을 얻으려면, 다음 로드 바이트 스트림에서 웹보기로 이미지.

  2. 내가 zip 파일에서 사진을 압축 해제하지 않으

    다음 은 SDCARD에 저장하고로드합니다.

  3. 또한, 나는 64 기수로 pitcture의 바이트를 인코딩하지 않으려는 다음 부하 중 하나를 웹보기 의 이미지,이 두 가지 방법이 매우 느려질 수 있기 때문이다.

+0

@ user549380 : 왜 WebView를 사용해야합니까? 둘째, 논리가 올바르지 않습니다. ""을 사용하면 로컬 또는 다른 형식의 '파일'에 대한 참조를 의미합니다. 내가 지금까지 읽은 것만 큼 안드로이드로 '메모리 내 (in-memory)'파일을 생성 할 수는 없지만, 가능하다면 WebView가 어떻게 액세스 할 수 있는지 알지 못합니다. – Squonk

+0

"mdict"라는 유명한 소프트웨어가 이미지를 하드 드라이브에 저장하지 않고 리소스 파일 (.mdd 파일)에서 이미지를로드 할 수 있습니다. 그리고 그것은 단지 과 같은 html을 사용하여 abc.jpg를로드합니다.이 파일은 .mdd 파일로 압축됩니다. –

+0

mdict가 을 사용하는 방법을 보여주고 더 자세히 설명 할 수 있습니다. – Squonk

답변

6

내가 아는 한,이 세 가지 요구 사항을 모두 충족시킬 방법이 없습니다. 그것을 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"); 
} 
+4

loadData()에 직접 base64를 지정하면이 기능을 더 단축 할 수 있습니다. 'String b64Image = Base64.encodeToString (image, Base64.DEFAULT); ' 'web.loadData (b64Image, "image/jpeg", "base64"); – Thorbear

+0

@ Thorbear 응답이 작동하지 않았지만 댓글이 적용되었습니다. – user1032613

1

나는 당신의 청취자에게 당신의 HTML 페이지 참조 이미지에 다음 (예 : 8001의 경우) 특정 포트를 듣고 어디 응용 프로그램 내에서 임베드 HTTP 수신기를 사용하는 것이 좋습니다. 예를 들어 Test.png을 위해 찾고있을 것 같은 뭔가 :

http://localhost:8001/Test.png

당신이 당신의 zip 파일이나 데이터베이스에보고 한 후 HTTP 응답 스트림에 바이트 스트림을 반환 할 수있는 리스너에 끝날 것이 요청!

NanoHTTPD (http://elonen.iki.fi/code/nanohttpd/)를보고 목표를 달성하기 위해 맞춤 서비스 방법을 구현하는 것이 좋습니다.

도움이 되시길 바랍니다 :-)

+0

이것은 상황에 따라 좋은 옵션이지만 http : // localhost는 PC와는 달리 작동하지 않는 또 다른 두통입니다 –

관련 문제