2012-03-19 46 views
63

Tôi muốn mã hóa và giải mã đối tượng Bitmap trong chuỗi base64. Tôi sử dụng Android API10,Mã hóa và giải mã đối tượng bitmap trong chuỗi base64 trong Android

Tôi đã thử, không thành công, để sử dụng một phương thức trong biểu mẫu này để mã hóa số 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; 
} 

Trả lời

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

sử dụng Ví dụ:

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

Hoàn hảo .. Cảm ơn – Noman

+2

Cảm ơn bạn !! Đây chỉ là những gì tôi cần, ngắn và ngọt ngào. –

+5

Mã nói nhiều hơn lời nói, cảm ơn bạn! – atx

9

Hy vọng điều này sẽ giúp bạn

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

(nếu bạn đang tham chiếu URI để xây dựng bitmap) HOẶC

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

(nếu bạn đang tham chiếu drawable để xây dựng bitmap)

Sau đó Mã hóa nó

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

Đối với Giải mã logic sẽ được đảo ngược chính xác của mã hóa

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

tôi muốn tránh BitmapFactory vì nó sẽ chuyển đổi jpeg để bitmap sẽ diễn nhiều bộ nhớ hơn. Bất kỳ giải pháp nào chuyển đổi jpeg/png thành byte [] và sau đó Base64 sẽ hoạt động hoàn hảo cho Android. –

Các vấn đề liên quan