2011-01-29 64 views
135

Tengo una Cadena Base64 que representa una imagen de mapa de bits.Cómo convertir una cadena Base64 en una imagen BitMap para mostrarla en un ImageView?

necesito para transformar esa imagen Cadena de mapas de bits en vez de usarlo en un ImageView en mi aplicación Android

¿Cómo hacerlo?

Este es el código que utilizo para transformar la imagen en la cadena de base 64:

//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); 

Respuesta

256

básicamente Puede volver el código utilizando alguna otra construida en los métodos.

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

decodedByte devuelve un valor nulo en mi caso – Anirudh

+1

@Anirudh: ¿funcionó para ti? – mudit

+11

asegúrate de no pasar los "datos: image/jpg; base64" y pasa solo los bytes de la imagen ... No olvides cambiar la cadena a bytes ... photoData = photoData.substring (photoData.indexOf (", ") + 1); byte [] decodedString = Base64.decode (photoData.getBytes(), Base64.DEFAULT); Espero que ayude a alguien. – srinivasan

14

Este es un hilo muy antiguo, pero pensado para compartir esta respuesta, ya que tomó gran parte de mi tiempo de desarrollo para gestionar NULL retorno de BitmapFactory.decodeByteArray() como @Anirudh ha enfrentado.

Si la cadena encodedImage es una respuesta JSON, basta con utilizar Base64.URL_SAFE en lugar de Base64.DEAULT

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

obtengo un error de base-64 (IllegalArgumentException) cuando uso Base64.URL_SAFE. Verifiqué la cadena base64 usando una etiqueta HTML img. Estoy viendo la imagen en la página HTML. – mudit

+0

Hola @mudit, ¿has descubierto cómo solucionar la excepción bad-base64? Si es así, ¿te importa compartir? Tengo el mismo problema. Han estado durante dos días y se han quedado sin ideas. – ito

+0

@ito asegúrese de no pasar los "datos: image/jpg; base64" y pase solo los bytes de la imagen .. No olvide cambiar la cadena a bytes .. photoData = photoData.substring (photoData.indexOf (",") + 1); byte [] decodedString = Base64.decode (photoData.getBytes(), Base64.DEFAULT); – srinivasan

34

Para cualquier persona que todavía está interesada en esta pregunta: Si: 1-decodeByteArray devuelve null 2 en Base64. decodificación arroja bad-base64 Excepción

Aquí está la solución: -Debe considerar que el valor enviado desde API es Base64 Encoded y debe decodificarse primero en o der para convertirlo en un objeto Bitmap! -Tome un vistazo a su base 64 codificado de cadena, si se empieza con

datos: image/jpg; base64

El Base64.decode no será capaz de decodificarlo, por lo que tiene ser removido de su cadena codificada:

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

Ahora el pureBase64Encoded objeto está listo para ser decodificado:

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

Ahora simplemente use la línea de abajo para convertir esto en Bitmap ¡Objeto! :

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

O si usted está utilizando la gran biblioteca Glide:

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

Esto debería hacer el trabajo! ¡Se desperdició un día en esto y se acercó a esta solución!

Nota: Si aún obtiene el error bad-base64 considere otros indicadores de Base64.decode como Base64.URL_SAFE y así sucesivamente

+0

Recibí base64 de la respuesta json, utilicé Base.64.URL_SAFE obtuve bad-base64 error, revisado este hilo y resuelto, Thumbs up man .. – livemaker

4

comprobar en línea puede utilizar

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

Usted puede convertir la serie de imagen como 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

+0

Encontré el sitio web muy útil para averiguar si había un problema con mi código o con los datos de la imagen. ¡Gracias por compartir! –

Cuestiones relacionadas