¿Cómo convertir una cadena Base64 en una imagen de mapa de bits para mostrarla en un ImageView?
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);
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);
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.