2016-10-19 8 views
0

例私はURLがありますか?私は「base64データを変換する方法:urlをリンクするには? <a href="http://example.com/pic.png" rel="nofollow">http://example.com/pic.png</a></p> <p>Javaのアンドロイドでこれを行うに任意のコードがある:;:データ:base64で、ajshgvdkau ....</p> <p>私はそれを変換したい画像/ PNG

==================================

編集1

イメージをURLから取り出してテキストビューに表示しようとしています。ケース2を使用すると完全に画像が表示されますが、

ですが、 「:データの不明なプロトコル」とそこに誤差がある「W/AwContents:nativeOnDrawに失敗しました。背景色をクリア」

 //case 1 
//   String base_url = "<p>Image 1 : <img src=\"data:image/jpeg;base64,/9j/4AAQSk... 

     //case 2 
     String base_url = "<p>Image 1 : <img src=\"http://example.com/android/tryout/logo.png\"></img></p>"; 

     Spanned span2 = Html.fromHtml(base_url,getImageHTML(),null); 

     TextView tv = (TextView)findViewById(R.id.target); 
     tv.setText(span2); 

が、これは私の機能の答えのための

public Html.ImageGetter getImageHTML() { 

    Html.ImageGetter imageGetter = new Html.ImageGetter() { 
     public Drawable getDrawable(String source) { 
      try { 
       Drawable drawable = Drawable.createFromStream(new URL(source).openStream(), "src"); 
       drawable.setBounds(0, 0, drawable.getIntrinsicWidth(),drawable.getIntrinsicHeight()); 

       return drawable; 
      } catch(IOException exception) { 
       Log.v("IOException", exception.getMessage()); 
       return null; 
      } 
     } 
    }; 

    return imageGetter; 
} 

おかげです。

+2

最初のURLが何であるか分かりません。それは実際に_イメージです。イメージはどこにもホストされていないため、見つかるべきhttp urlはありません。 – njzk2

答えて

0

私はこの問題を解決しました。私はBase64InputStreamを使用しています。有効なbase64コードを取得するには、まず "data:image/jpeg; base64"を削除します。

public Html.ImageGetter getImageHTML() { 

    Html.ImageGetter imageGetter = new Html.ImageGetter() { 
     public Drawable getDrawable(String source) { 
      try { 

       String[] str = source.split("base64"); 

       Base64InputStream is = new Base64InputStream(new ByteArrayInputStream(str[1].getBytes()), 0); 

       Bitmap decodedByte = BitmapFactory.decodeStream(is); 

       Drawable drawable = new BitmapDrawable(getResources(), decodedByte); 

       drawable.setBounds(0, 0, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight()); 

       return drawable; 
      }catch(Exception e){ 
       e.getMessage(); 
       return null; 
      } 
     } 
    }; 

    return imageGetter; 
} 
1

あなたはバイト配列https://developer.android.com/reference/android/util/Base64.html

byte[] decodedString = Base64.decode(encodedUrl, Base64.DEFAULT);

としてエンコードされた文字列をデコードするBase64でクラスを使用することができ、その後、あなたはバイト配列からビットマップを作成することができます。

Bitmap decodedByte = BitmapFactory.decodeByteArray(decodedString, 0, decodedString.length); 

URLをデコードする際にメタ情報(つまり、data:image/png; base64)を削除してください。 UPDATE:あなたのコードに基づいて、ここに サンプル:

public Html.ImageGetter getImageHTML() { 

    Html.ImageGetter imageGetter = new Html.ImageGetter() { 
     public Drawable getDrawable(String source) { 
      try { 
       String base64Image = source.substring("data:image/jpeg;base64,".length); 
       byte[] decodedString = Base64.decode(base64Image, Base64.DEFAULT); 
       Bitmap bitmap = BitmapFactory.decodeByteArray(decodedString, 0, decodedString.length); 
       Drawable drawable = new BitmapDrawable(getActivity().getResources()/*or other way to get resource reference*/, bitmap); 
       drawable.setBounds(0, 0, drawable.getIntrinsicWidth(),drawable.getIntrinsicHeight()); 

       return drawable; 
      } catch(IOException exception) { 
       Log.v("IOException", exception.getMessage()); 
       return null; 
      } 
     } 
    }; 

    return imageGetter; 
} 
+0

トリムブロム。 saya coba dulu :) –

+0

インドネシア語を母国語としていますが、インドネシア語を使用しないでください。ここでは大多数の人が私たちの言語を知らないためです) –

+0

ok。私はそのことについて申し訳ありません –

関連する問題

 関連する問題