将图像转换为字符串时的数据大小

时间:2016-12-02 08:19:19

标签: android image compression

我正在尝试使用Android应用中的Base64 Android类将图像转换为字符串,然后我成功获取了字符串。

但是当我检查字符串的长度为86.13 kB(使用String.length)的图像几乎是85660.谷歌搜索后我发现这两个大小几乎相同。这意味着虽然我将图像转换为字符串,但不会发生数据缩减。

我的怀疑是: 1)两个尺寸是否相同? 2)是否有任何其他方法将图像转换为字符串,因此我将数据减少。

我用于将Image转换为String的代码是

ByteArrayOutputStream baos=new  ByteArrayOutputStream();
imageSelected.compress(Bitmap.CompressFormat.PNG,100, baos);
byte [] b=baos.toByteArray();
String temp=Base64.encodeToString(b, Base64.DEFAULT);

伙计们请帮忙。非常感谢提前

2 个答案:

答案 0 :(得分:1)

首先,将图像转换为base64字符串将增加大小,而不是减少它。这是因为base 64字符串每个字节将使用多个字符,这意味着图像中每个字节的字符串中有多个字节。

其次,你要比较错误的东西。你的设备上有一个JPEG文件。你打开它,然后压缩到PNG-这可能会增加大小,因为PNG是无损压缩而不是有损。你是那么png的base64编码,并将大小与磁盘上的jpeg进行比较?这毫无意义。如果要进行比较,请将base64字符串的大小(以字节为单位)与输出流的长度进行比较 - 这将显示大约2倍的大小,请参阅第1点。

这就是通常不应该使用Base64的原因。将二进制数据转换为非二进制存储机制的文本数据是一种破解,只有在绝对必要时才应该使用 - 例如对于具有二进制数据的非多部分HTTP请求。它通常不应该用于存储,也不是压缩机制。

答案 1 :(得分:0)

您会混淆数据转换和数据压缩。转换'图像' String只是一种转换(将数据转换为另一种形式)而不是压缩。 如果要缩小图像的大小,则必须先压缩它。您可以在此处找到更多相关信息:How to compress image size? 或者您可以使用此imageSelected.compress方法获得乐趣(将CompressFormat更改为JPEG,将第二个整数更改为低于100等值,直到获得所需效果)