2012-03-19 11 views
63

Chcę zakodować i odkodować obiekt Bitmap w ciągu znaków base64. Używam Androida API10,Kodowanie i dekodowanie obiektów bitmapowych w łańcuchu base64 w systemie Android

Próbowałem, bez powodzenia, użyć metody w tej formie do kodowania 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; 
} 

Odpowiedz

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

Przykład użycia:

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

Perfect .. Dzięki – Noman

+2

Dziękuję! Właśnie tego potrzebowałem, krótko i słodko. –

+5

Kod mówi więcej niż słowa, dziękuję! – atx

9

nadzieję, że pomoże Ci

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

(jeśli odwołanie URI do skonstruowania mapy bitowej) LUB

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

(jeśli odwołują rozciągliwej skonstruować bitmapy)

Następnie zakoduj to

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

do dekodowania Logic będzie dokładnie odwrotnej kodowania

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

chciałbym uniknąć BitmapFactory jak będzie konwertować JPEG na bitmapę, która odbędzie więcej pamięci. Każde rozwiązanie, które konwertuje jpeg/png na bajt [], a następnie Base64 będzie działać idealnie dla Androidów. –

Powiązane problemy