How to convert a Base64 string into a Bitmap image to show it in a ImageView?

后端 未结 6 2068
臣服心动
臣服心动 2020-11-22 10:23

I have a Base64 String that represents a BitMap image.

I need to transform that String into a BitMap image again to use it on a ImageView in my Android app

H

相关标签:
6条回答
  • 2020-11-22 10:53

    To anyone who is still interested in this question: If: 1-decodeByteArray returns null 2-Base64.decode throws bad-base64 Exception

    Here is the solution: -You should consider the value sent to you from API is Base64 Encoded and should be decoded first in order to cast it to a Bitmap object! -Take a look at your Base64 encoded String, If it starts with

    data:image/jpg;base64

    The Base64.decode won't be able to decode it, So it has to be removed from your encoded String:

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

    Now the pureBase64Encoded object is ready to be decoded:

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

    Now just simply use the line below to turn this into a Bitmap Object! :

    Bitmap decodedBitmap = BitmapFactory.decodeByteArray(decodedBytes, 0, decodedBytes.length);

    Or if you're using the great library Glide:

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

    This should do the job! It wasted one day on this and came up to this solution!

    Note: If you are still getting bad-base64 error consider other Base64.decode flags like Base64.URL_SAFE and so on

    0 讨论(0)
  • 2020-11-22 11:02

    You can just basically revert your code using some other built in methods.

    byte[] decodedString = Base64.decode(encodedImage, Base64.DEFAULT);
    Bitmap decodedByte = BitmapFactory.decodeByteArray(decodedString, 0, decodedString.length); 
    
    0 讨论(0)
  • 2020-11-22 11:02

    This is a great sample:

    String base64String = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAACACAYAAADDPmHLAA...";
    String base64Image = base64String.split(",")[1];
    byte[] decodedString = Base64.decode(base64Image, Base64.DEFAULT);
    Bitmap decodedByte = BitmapFactory.decodeByteArray(decodedString, 0, decodedString.length);
    imageView.setImageBitmap(decodedByte);
    

    Sample found at: https://freakycoder.com/android-notes-44-how-to-convert-base64-string-to-bitmap-53f98d5e57af

    This is the only code that worked for me in the past.

    0 讨论(0)
  • 2020-11-22 11:03

    To check online you can use

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

    You can convert string to image like this way

    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

    0 讨论(0)
  • 2020-11-22 11:13

    I've found this easy solution

    To convert from bitmap to Base64 use this method.

    private String convertBitmapToBase64(Bitmap bitmap) {
        ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
        bitmap.compress(Bitmap.CompressFormat.PNG, 100, byteArrayOutputStream);
        byte[] byteArray = byteArrayOutputStream .toByteArray();
        return Base64.encodeToString(byteArray, Base64.DEFAULT);
    }
    

    To convert from Base64 to bitmap OR revert.

    private Bitmap convertBase64ToBitmap(String b64) {
        byte[] imageAsBytes = Base64.decode(b64.getBytes(), Base64.DEFAULT);
        return BitmapFactory.decodeByteArray(imageAsBytes, 0, imageAsBytes.length);
    }
    
    0 讨论(0)
  • 2020-11-22 11:15

    This is a very old thread but thought to share this answer as it took lot of my development time to manage NULL return of BitmapFactory.decodeByteArray() as @Anirudh has faced.

    If the encodedImage string is a JSON response, simply use Base64.URL_SAFE instead of Base64.DEAULT

    byte[] decodedString = Base64.decode(encodedImage, Base64.URL_SAFE);
    Bitmap decodedByte = BitmapFactory.decodeByteArray(decodedString, 0, decodedString.length);
    
    0 讨论(0)
提交回复
热议问题