2012-03-19 22 views
63

Voglio codificare e decodificare l'oggetto Bitmap nella stringa base64. Io uso Android API10,Codifica e decodifica oggetto bitmap nella stringa base64 in Android

Ho provato, senza successo, a utilizzare un metodo in questo formato per codificare uno 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; 
} 

risposta

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

Esempio di utilizzo:

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

Perfetto .. Grazie – Noman

+2

Grazie !! Questo è proprio quello di cui avevo bisogno, breve e dolce. –

+5

Il codice parla più delle parole, grazie! – atx

9

Spero che questo vi aiuterà a

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

(se si fa riferimento URI per costruire bitmap) O

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

(se si fa riferimento drawable per costruire bitmap)

Quindi codificalo

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

per la decodifica logica sarà esattamente opposto di codifica

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

vorrei evitare di BitmapFactory in quanto permette di convertire jpeg a BitMap che avrà più memoria. Qualsiasi soluzione che converta jpeg/png in byte [] e poi Base64 funzionerà perfettamente con Androids. –

Problemi correlati