能否进一步压缩Base64 PNG字符串?

9

我有一张PNG图片,并得到了它的Base64 PNG字符串表示。它仍然相当大,我想知道是否可以进一步压缩。这是否可能?

背景

我正在使用Selenium 2(Java)创建当前网页的屏幕截图,将其转换为Base64字符串,并将该字符串发送给JavaScript执行程序以重新创建该图像并进行一些图像处理。但是,如果该字符串大小太大,服务器会返回异常。

3个回答

11

简短回答:不行 - 这样就会失去“可打印字符串”的特性。

通常PNG已经使用了像ZIP文件中使用的复杂压缩算法。因此,在应用base64编码之前进行压缩只能获得非常有限的大小减少。

在应用base64编码之后再进行压缩将使它变为二进制数据 - 在这种情况下,您可以跳过base64编码步骤。


在给定原始图像数据的情况下,与base64编码相比,压缩率可以提高多少? - Alp
Base64将数据扩大约33%; 良好的压缩可能会使您获得高达10%的减少(最大值),具体取决于算法。 - Robert
1
非常感谢。这对我的目的来说不够,所以我必须考虑另一种解决方案。也许将字符串分成多个块。 - Alp
我想知道你所说的“可打印字符串”的含义是什么。你能详细解释一下吗? - Gaurav Bhor
可打印字符串仅使用可打印字符,因此许多字符不能使用。未使用的字符意味着最终未使用的位(低熵),不使用位与压缩相反(压缩试图增加最大化/优化熵)。 - Robert

1
如果这是一个网络问题而不是您字符串的大小问题,当我将我的图像发送到Mongo数据库时,这对我有用。
使用Express.js,bodyParser的限制默认为1056k,因此您可以通过以下更改限制来解决问题。
app.use(bodyParser.urlencoded({ limit: '50mb', 
  extended: true
}));
app.use(bodyParser.json({ limit: '50mb' }));

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接