以下用例是问题的基础: 通过线路发送图像作为文本?以最小的占地面积做到这一点。
我知道要将二进制数据(图像)作为文本发送,标准解决方案是将其编码为 base64。然而,众所周知,它的尺寸增加了约 33%。
有没有办法使用压缩并仍然将图像作为文本发送?
例如,如果我编码为 Base64,然后编码为 gzip,那么 gz 缓冲区会再次是二进制还是字符串?
或者反过来,我可以先将内存中的图像进行gzip压缩,然后编码为base64以通过网络发送吗?
Obs:如果有 Node.js 中的示例代码,我们将不胜感激。
谢谢。
如果对 Base-64 输出进行 gzip,它会再次变成二进制,大部分 Base-64 扩展都会被撤销。虽然还是比原来的大一点。压缩总是会产生二进制输出,因此必须在压缩后进行编码。
如果您想要小于 33% 的扩展,您可以使用超过 64 个字符。找出您可以通过媒体作为“文本”传送多少个字符而不会损坏。它可能比 64 多一点。它可能在 85 到 95 的范围内。称之为 n。现在您可以使用大约 log(256) / log(n) 的扩展进行编码。然后您可以将扩展降低至 25% 至 22%。