decodificar - imageview to base64 android
¿Cómo convertir una cadena Base64 en una imagen BitMap para mostrarla en un ImageView? (4)
Este es un hilo muy antiguo, pero pensé en compartir esta respuesta, ya que me llevó mucho tiempo de desarrollo administrar el retorno 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);
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 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.
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);
}
}
Simplemente puede revertir su código utilizando algunos otros métodos integrados.
byte[] decodedString = Base64.decode(encodedImage, Base64.DEFAULT);
Bitmap decodedByte = BitmapFactory.decodeByteArray(decodedString, 0, decodedString.length);