android ¿Cómo convertir una cadena Base64 en una imagen BitMap para mostrarla en un ImageView?




2 Answers

Para cualquiera que esté interesado en esta pregunta: If: 1-decodeByteArray devuelve nulo 2-Base64.decode arroja bad-base64 Exception

Aquí está la solución: -Deberías considerar que el valor enviado desde la API está codificado en Base64 y debe decodificarse primero para convertirlo en un objeto de mapa de bits. - Eche un vistazo a su cadena codificada en Base64, si comienza con

datos: image / jpg; base64

El Código Base64 no podrá decodificarlo, por lo que debe 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 decodificarse:

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

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

Bitmap decodedBitmap = BitmapFactory.decodeByteArray (decodedBytes, 0, decodedBytes.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! ¡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, etc.

android base64 imageview

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

Necesito transformar ese String en una imagen de BitMap nuevamente para usarlo 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);



Para verificar en línea puede usar

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

Puede convertir cadena a 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




Related