Android Base64返回比图像大得多的字符串

时间:2017-07-20 18:25:37

标签: android image bitmap

我需要将图像发送到服务器, 我有一个3.30 MB大小的图像,我使用:

将其转换为字节数组
 ByteArrayOutputStream stream = new ByteArrayOutputStream();
    bmp.compress(Bitmap.CompressFormat.PNG, 100, stream);
    byte[] byteArray = stream.toByteArray();

然后使用:

到base64
Base64.encodeToString(byteArray , Base64.DEFAULT)

编辑:如果我检查字节数组(bytearray)的长度,它是20 MB! 但在PC或手机上的尺寸显示为3.30 MB

返回字符串的长度是28 MB,任何解释和解决方案?

3 个答案:

答案 0 :(得分:1)

您正在压缩质量为100和PNG的位图。请使用JPEG和60或75质量。

答案 1 :(得分:0)

new Bar(foo) { Name = "John" }

答案 2 :(得分:0)

压缩位图的质量为100意味着没有太大的压缩,并且在第一个代码中得到的图像更大:

 ByteArrayOutputStream stream = new ByteArrayOutputStream();
    bmp.compress(Bitmap.CompressFormat.PNG, 100, stream);
    byte[] byteArray = stream.toByteArray();

byteArray这里有20MB

Base64编码大于字节数

是正常的

创建Base64是为了发送/存储二进制数据,您只能发送文本  并且在字节中使用256个64个字符,或者每个字节使用相同的8个字符 https://en.wikipedia.org/wiki/Base64

Base64.encodeToString(byteArray , Base64.DEFAULT)