¿Cómo convertir una cadena Base64 en una imagen de mapa de bits para mostrarla en un ImageView?

Resuelto NullPointerException asked hace 54 años • 10 respuestas

Tengo una cadena Base64 que representa una imagen de mapa de bits.

Necesito transformar esa cadena en una imagen BitMap nuevamente para usarla en ImageView en mi aplicación de Android.

¿Cómo hacerlo?

Este es el código que utilizo para transformar la imagen en la cadena 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);
NullPointerException avatar Jan 01 '70 08:01 NullPointerException
Aceptado

Básicamente, puedes revertir tu código usando otros métodos integrados.

byte[] decodedString = Base64.decode(encodedImage, Base64.DEFAULT);
Bitmap decodedByte = BitmapFactory.decodeByteArray(decodedString, 0, decodedString.length); 
user432209 avatar Jan 29 '2011 14:01 user432209

Para cualquiera que todavía esté interesado en esta pregunta: Si: 1-decodeByteArray devuelve nulo 2-Base64.decode arroja una excepción bad-base64

Aquí está la solución: -¡Debe considerar que el valor que le envía la API está codificado en Base64 y debe descodificarse primero para poder convertirlo en un objeto de mapa de bits! -Eche un vistazo a su cadena codificada en Base64, si comienza con

datos:imagen/jpg;base64

Base64.decode no podrá decodificarlo, por lo que debe eliminarse de su cadena codificada:

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

Ahora el objeto pureBase64Encoded está listo para ser decodificado:

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

¡Ahora simplemente use la línea a continuación para convertir esto en un objeto de mapa de bits ! :

Mapa de bits decodificadoBitmap = BitmapFactory.decodeByteArray(decodificadoBytes, 0, decodificadoBytes.length);

O si estás usando la gran biblioteca Glide :

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

¡Esto debería hacer el trabajo! ¡Perdió un día en esto y llegó a esta solución!

Nota : Si sigue recibiendo el error bad-base64, considere otros indicadores Base64.decode como Base64.URL_SAFE, etc.

Reza avatar Mar 04 '2016 15:03 Reza