2012-03-19 26 views
63

Quiero codificar y decodificar el objeto Bitmap en la cadena base64. Uso Android API10,Codificar y decodificar objeto de mapa de bits en cadena base64 en Android

He intentado, sin éxito, utilizar un método de esta forma para codificar Bitmap.

public static String encodeTobase64(Bitmap image) { 
    Bitmap immagex=image; 
    ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
    immagex.compress(Bitmap.CompressFormat.JPEG, 100, baos); 
    byte[] b = baos.toByteArray(); 
    String imageEncoded = Base64.encodeToString(b,Base64.DEFAULT); 

    Log.e("LOOK", imageEncoded); 
    return imageEncoded; 
} 

Respuesta

201
public static String encodeToBase64(Bitmap image, Bitmap.CompressFormat compressFormat, int quality) 
{ 
    ByteArrayOutputStream byteArrayOS = new ByteArrayOutputStream(); 
    image.compress(compressFormat, quality, byteArrayOS); 
    return Base64.encodeToString(byteArrayOS.toByteArray(), Base64.DEFAULT); 
} 

public static Bitmap decodeBase64(String input) 
{ 
    byte[] decodedBytes = Base64.decode(input, 0); 
    return BitmapFactory.decodeByteArray(decodedBytes, 0, decodedBytes.length); 
} 

Ejemplo de uso:

String myBase64Image = encodeToBase64(myBitmap, Bitmap.CompressFormat.JPEG, 100); 
Bitmap myBitmapAgain = decodeBase64(myBase64Image); 
+2

Perfecto ... Gracias – Noman

+2

Gracias !! Esto es justo lo que necesitaba, corto y dulce. –

+5

¡El código habla más que las palabras, gracias! – atx

9

Hope esto le ayudará a

Bitmap bitmap = BitmapFactory.decodeStream(this.getContentResolver().openInputStream(uri)); 

(si se hace referencia URI para la construcción de mapa de bits) O

Resources resources = this.getResources(); 
Bitmap bitmap= BitmapFactory.decodeResource(resources , R.drawable.logo); 

(si se hace referencia estirable para la construcción de mapa de bits)

Luego codifíquelo

ByteArrayOutputStream stream = new ByteArrayOutputStream(); 
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, stream); 
byte[] image = stream.toByteArray(); 
String encodedImage = Base64.encode(image, Base64.DEFAULT); 

para la decodificación de lógica será inversa exactamente de codificación

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

que me gustaría evitar BitmapFactory ya que convertirá jpeg de mapa de bits que se llevará a más memoria. Cualquier solución que convierta jpeg/png en byte [] y luego Base64 funcionará perfectamente para Androids. –

Cuestiones relacionadas