java - Java 中(未)压缩的 base64 编码字符串 (Android)

标签 java android compression base64 byte

我正在开发一个 Android 应用程序,其中服务器将不同的 Base64 编码图像发送到应用程序(反之亦然)。 是否可以压缩base64字符串?类似的东西

photo --> base64 encoded string --> compressed string

这样做,我可以节省多少数据,或多或少?而且,如果我可以节省一些字节,那么在 Android 和 Java 中进行压缩的最佳方法是什么?

在纯 Java 中,我在 Stackoverflow 上播种了 Deflater 类(它可以完成这项工作,但我不知道它可以节省多少数据)。

最佳答案

压缩率取决于消息中的冗余。
大多数图像格式已经被压缩,因此不存在有意义的冗余。

将图像转换为 base64 会对其进行扩展 by about 37% .
压缩永远不会 100% 有效,而且它总是会增加一点开销(对于 header 和其他内容)。
所以您看到的是原始图像的 105%。

但请注意,压缩 Base64 文件没有任何意义,因为对文件进行 Base64 处理的全部目的是允许它作为文本发送。
如果你压缩它,它将再次成为二进制文件。
在这种情况下,最好保持原样。

是否需要保留可通过电子邮件发送的字符串
它需要保持base64。因为原始文件已经被压缩,所以您无法进一步压缩它。

替代方案
如果您有有损算法(例如 jpeg),您可以通过将其扩展为位图来缩小图片,然后使用不同的参数将其重新编码回 jpeg。
这会导致一些质量损失,但可能是将 8MB 图片转换为 100kB 图片的好方法。
然后你可以对它进行 Base64 并通过电子邮件发送。

关于java - Java 中(未)压缩的 base64 编码字符串 (Android),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19202916/

相关文章:

android - 如何在 Android 的 air 应用程序中运行 swf 文件

javascript - Android Chrome 输入 onkeydown

java - 如何在 JSP 中使用 JavaBeans 显示对象数组

java - Scala 类 Gson 库

android studio gradle build编译报错

delphi - 检测文件压缩

java - Spring boot http 响应压缩不适用于某些用户代理

java - 解压缩的视频文件在 Java 中不起作用

java - 在 Java 中将 for 循环转换为 while 循环

javascript - 如何在jsp端显示类似 "Please wait"的加载消息?