将图像转换为字符串的数据大小
Posted
技术标签:
【中文标题】将图像转换为字符串的数据大小【英文标题】:Data size on converting image to string 【发布时间】:2017-04-17 02:12:43 【问题描述】:我正在尝试使用 android 应用程序中的 Base64 Android 类将图像转换为字符串,并且我成功获取了字符串。
但是当我检查大小为 86.13 kB 的图像的字符串长度时(使用 String.length)几乎是 85660。谷歌搜索后我知道这两个大小几乎相同。这意味着尽管我将图像转换为字符串,但不会发生数据缩减。
我的疑问是: 1)两个尺寸一样吗? 2)有没有其他方法可以将图像转换为字符串,所以我会减少数据。
我用于将图像转换为字符串的代码是
ByteArrayOutputStream baos=new ByteArrayOutputStream();
imageSelected.compress(Bitmap.CompressFormat.PNG,100, baos);
byte [] b=baos.toByteArray();
String temp=Base64.encodeToString(b, Base64.DEFAULT);
请大家帮忙。提前致谢
【问题讨论】:
你正在使用(Bitmap.CompressFormat.PNG,100, baos)
100% 压缩,如果你减少它,那么它也会减少String
的大小。
哦...将尝试降低压缩百分比。感谢您的 cmets
目前还不清楚您认为图像的大小。您没有显示 86.13 KB 的来源。
@greenapps 使用此代码File file = new File("/sdcard/imageName.jpeg"); long length = file.length(); length = length/1024;
因此您将 jpg 文件的长度与 base64 编码的 png 文件的长度进行比较。这是一个奇怪的比较。顺便说一句:你为什么将 jpg 转换为 png?
【参考方案1】:
首先,将图像转换为 base64 字符串会增加而不是减小大小。这是因为 base 64 字符串每个字节将使用多个字符,这意味着图像中每个字节的字符串中有多个字节。
其次,你在比较错误的东西。您的设备上有一个 JPEG 文件。您打开它,然后将其压缩为 PNG - 这可能会增加大小,因为 PNG 是无损压缩而不是有损。然后,您对该 png 进行 base64 编码,并将其大小与磁盘上的 jpeg 进行比较?这根本没有意义。如果要比较,请将 base64 字符串的大小(以字节为单位)与输出流的长度进行比较——这将显示它大约 2 倍大,请参见第 1 点。
这就是通常不应使用 Base64 的原因。将二进制数据转换为文本数据以用于非二进制存储机制是一种技巧,并且仅应在绝对必要时使用 - 例如用于具有二进制数据的非多部分 HTTP 请求。它通常不应该用于存储,也不是压缩机制。
【讨论】:
我理解你的观点。但是有没有什么可以代替 Base64 的替代品?我会尝试比较你提到的尺寸。谢谢 要与字符串一致并缩小它?不会。对于相同的数据,二进制格式总是小于文本格式【参考方案2】:您混淆了数据转换和数据压缩。将“图像”转换为字符串只是一种转换(将数据转换为另一种形式)而不是压缩。
如果要缩小图像的大小,则必须先对其进行压缩。你可以在这里找到更多信息:How to compress image size?
或者你可以用这个imageSelected.compress
方法玩得开心(将 CompressFormat 更改为 JPEG,将第二个整数更改为小于 100 的值等,直到你得到想要的效果)
【讨论】:
感谢@prezmyslaw 为您提供 cmets。会试一试 我不想压缩结果也是图像的图像,而是想将图像转换为大小更小的字符串格式以上是关于将图像转换为字符串的数据大小的主要内容,如果未能解决你的问题,请参考以下文章
上传图像多部分表单 HTTPWebRequest - 将图像数据转换为字符串?
如何将 base64 字符串格式的图像转换为清晰图像缩小器期望的数据类型?