Cómo convertir una cadena Base64 en una imagen de BitMap para mostrarlo en un ImageView?

Tengo una cadena de Base64 que representa una imagen de BitMap.

Necesito transformar esa cadena en una imagen de BitMap otra vez para utilizarla en un 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); 

Usted puede básicamente revertir su código usando algún otro construido en los métodos.

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

Para cualquiera que esté interesado todavía en esta pregunta: Si: 1-decodeByteArray devuelve null 2-Base64.decode lanza bad-base64 Excepción

Aquí está la solución: -Usted debe considerar el valor enviado a usted desde la API es Base64 codificado y debe ser decodificado primero para enviarlo a un objeto de mapa de bits. -Haga un vistazo a su cadena codificada en Base64, si comienza con

Datos: image / jpg; base64

El código base64.decode no será capaz de decodificarlo, por lo que tiene que ser eliminado 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 descodificado:

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

Ahora simplemente usa la línea de abajo para convertirlo en un objeto de mapa de bits . :

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

O si está utilizando la gran biblioteca Glide :

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

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

Nota : Si sigue recibiendo error de base64 incorrecto, considere otros indicadores de Base64.decode como Base64.URL_SAFE y así sucesivamente

Este es un hilo muy antiguo, pero pensé compartir esta respuesta, ya que tomó mucho tiempo de desarrollo para gestionar la devolución NULL de BitmapFactory.decodeByteArray() como @Anirudh se ha enfrentado.

Si la cadena encodedImage es una respuesta JSON , simplemente use Base64.URL_SAFE lugar de Base64.DEAULT

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

Para comprobar en línea puede utilizar

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

Usted puede convertir la cadena a la imagen de esta manera

 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

  • Hacer diferencias entre setOnClickListener y setOnTouchListener
  • Android ImageView setImageResource en el código
  • Convertir url de imagen en mapa de bits rápidamente
  • Android cómo hacer que ImageView con un minWidth tiene un borde?
  • Gráfico de barras simples horizontal con representación de dos colores
  • Visualización de imagen de mapa de bits en vista de imagen mediante adaptador simple
  • Android cómo escribir clic evento de un ImageView
  • Animación panorámica de Android ImageView con scaleType centerCrop
  • Cómo animar ImageView de centro de cultivo para llenar la pantalla y viceversa (estilo de facebook)?
  • ImageView personalizado con sombra
  • Obtener mapa de bits adjunto a ImageView
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.