web-dev-qa-db-ja.com

ImageViewで表示するためにBase64文字列をBitMap画像に変換する方法は?

BitMapイメージを表すBase64文字列があります。

AndroidアプリのImageViewで使用するには、その文字列を再度BitMap画像に変換する必要があります

どうやってするの?

これは、画像をbase64文字列に変換するために使用するコードです。

//proceso de transformar la imagen BitMap en un String:
//Android:src="c:\logo.png"
Resources r = this.getResources();
Bitmap bm = BitmapFactory.decodeResource(r, R.drawable.logo);
ByteArrayOutputStream baos = new ByteArrayOutputStream();  
bm.compress(Bitmap.CompressFormat.PNG, 100, baos); //bm is the bitmap object   
byte[] b = baos.toByteArray();
//String encodedImage = Base64.encode(b, Base64.DEFAULT);
encodedImage = Base64.encodeBytes(b);
157

基本的に、他の組み込みメソッドを使用してコードを元に戻すことができます。

byte[] decodedString = Base64.decode(encodedImage, Base64.DEFAULT);
Bitmap decodedByte = BitmapFactory.decodeByteArray(decodedString, 0, decodedString.length); 
307
user432209

この質問にまだ興味がある人には:1-decodeByteArrayがnullを返す2-Base64.decode throws bad-base64 Exception

ソリューションは次のとおりです。-APIから送信された値はBase64エンコードであり、ビットマップオブジェクトにキャストするために最初にデコードする必要があることを考慮する必要があります。 -Base64でエンコードされた文字列を見てください。

data:image/jpg; base64

Base64.decodeはデコードできないため、エンコードされた文字列から削除する必要があります。

final String encodedString = "data:image/jpg;base64, ....";                        
final String pureBase64Encoded = encodedString.substring(encodedString.indexOf(",")  + 1);

これでpureBase64Encodedオブジェクトをデコードする準備ができました:

final byte[] decodedBytes = Base64.decode(pureBase64Encoded, Base64.DEFAULT);

次の行を使用して、これをビットマップオブジェクトに変換してください! :

ビットマップdecodeBitmap = BitmapFactory.decodeByteArray(decodedBytes、0、decodeBytes.length);

または、素晴らしいライブラリを使用している場合Glide

Glide.with(CaptchaFragment.this).load(decodedBytes).crossFade().fitCenter().into(mCatpchaImageView);

これでうまくいくはずです!ある日これを無駄にして、この解決策を思いつきました!

:それでもbad-base64エラーが発生する場合は、Base64.URL_SAFEなどの他のBase64.decodeフラグを検討してください。

56
MohammadReza

これは非常に古いスレッドですが、@ Anirudhが直面したようにNULLBitmapFactory.decodeByteArray()の戻り値を管理するのに多くの開発時間がかかったため、この答えを共有すると考えられました。

encodedImage文字列がJSON応答である場合、Base64.URL_SAFEの代わりに単にBase64.DEAULTを使用します

byte[] decodedString = Base64.decode(encodedImage, Base64.URL_SAFE);
Bitmap decodedByte = BitmapFactory.decodeByteArray(decodedString, 0, decodedString.length);
14
highfive

オンラインで確認するには

http://codebeautify.org/base64-to-image-converter

この方法で文字列を画像に変換できます

import Android.graphics.Bitmap;
import Android.graphics.BitmapFactory;
import Android.support.v7.app.AppCompatActivity;
import Android.os.Bundle;
import Android.util.Base64;
import Android.widget.ImageView;

import Java.io.ByteArrayOutputStream;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        ImageView image =(ImageView)findViewById(R.id.image);

        //encode image to base64 string
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.logo);
        bitmap.compress(Bitmap.CompressFormat.JPEG, 100, baos);
        byte[] imageBytes = baos.toByteArray();
        String imageString = Base64.encodeToString(imageBytes, Base64.DEFAULT);

        //decode base64 string to image
        imageBytes = Base64.decode(imageString, Base64.DEFAULT);
        Bitmap decodedImage = BitmapFactory.decodeByteArray(imageBytes, 0, imageBytes.length);
        image.setImageBitmap(decodedImage);
    }
}

http://www.thecrazyprogrammer.com/2016/10/Android-convert-image-base64-string-base64-string-image.html

8