2012-03-19 59 views
63

我想編碼和解碼Bitmap對象在字符串base64。我使用Android API10,Android中的base64字符串中的位圖對象的編碼和解碼

我試過,沒有成功,使用這種形式的方法來編碼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; 
} 

回答

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

實例:

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

完美..謝謝 – Noman 2013-11-17 12:42:48

+2

謝謝!這正是我所需要的,簡短而甜美。 – 2014-01-31 22:24:49

+5

代碼說話多於言語,謝謝! – atx 2014-12-11 10:19:01

9

希望這將幫助你

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

(如果您引用URI來構造位圖) OR

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

(如果您引用繪製構造位圖)

然後編碼它

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

對於解碼邏輯將被精確地反轉編碼的

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

我希望避免BitmapFactory因爲這將JPEG轉換爲位圖,其中將更多的記憶。任何將jpeg/png轉換爲byte []和Base64的解決方案都適用於Android。 – 2013-02-12 19:05:37