[英]Android Base64 encoding
public String encodeTobase64(Bitmap image){
System.gc(); //For memory efficiency
ByteArrayOutputStream baos = new ByteArrayOutputStream();
image.compress(Bitmap.CompressFormat.JPEG, 100, baos);
byte[] b = baos.toByteArray();
String imageEncoded = null;
imageEncoded = Base64.encodeToString(b, Base64.DEFAULT);
return imageEncoded;
}
我可以將字節數組拆分為多個部分,然后在不同的線程上對它們進行編碼,這樣對於較大的圖像來說可能很快,然后最后將它們加入。
如果你通過一次它實際上是可能的,如圖3的倍數處理您的字節這個職位 。
否則,由於Base64算法的工作方式而無法正常工作。 拆分數組時,每個段可能具有或多或少的填充,因此,當最后將String
連接在一起並嘗試執行反向操作(返回byte[]
)時,它很可能會失敗。
這是一個小例子:
String test = "This is a test";
byte[] testBytes = test.getBytes();
int mid = testBytes.length / 2;
byte[] part1 = Arrays.copyOfRange(testBytes, 0, mid);
byte[] part2 = Arrays.copyOfRange(testBytes, mid, testBytes.length);
Encoder base64Encoder = Base64.getEncoder();
System.out.println(base64Encoder.encodeToString(testBytes));
System.out.println(base64Encoder.encodeToString(part1));
System.out.println(base64Encoder.encodeToString(part2));
這將輸出:
VGhpcyBpcyBhIHRlc3Q=
VGhpcyBpcw==
IGEgdGVzdA==
請注意,如果將第二個兩個Strings
放在一起,則它們不等於第一個。 =
字符是填充。
如果您擔心使用Base64編碼圖像的效率,可以在單個后台線程上執行操作。 您可以使用AsyncTask
作為一種選擇來幫助您做到這一點。
要部分編碼base64,首先需要了解base64編碼是如何工作的。 檢查下面的URL。
例如在字符串的情況下。 您只需要將字符串數組划分為大小為3的數組,例如,如果要在base64中轉換“ 12345678aa”,則
按以下順序轉換
現在只合並您的結果。 它將變成“ MTIzNDU2NzhhYQ ==“。 這是“ 12345678aa”的編碼值。
Chears ................. :)
您忘記解碼位圖,然后再將其轉換為字節數組。
添加以下行
Bitmap bm = BitmapFactory.decodeFile(image);
后
System.gc(); //For memory efficiency
因此,您的代碼將如下所示:
public String encodeTobase64(Bitmap image){
System.gc(); //For memory efficiency
Bitmap bm = BitmapFactory.decodeFile(image);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
bm.compress(Bitmap.CompressFormat.JPEG, 100, baos);
byte[] b = baos.toByteArray();
String imageEncoded = null;
imageEncoded = Base64.encodeToString(b, Base64.DEFAULT);
return imageEncoded;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.