是否可以进一步压缩Base64 PNG字符串?

问题描述 投票:8回答:3

我有一个PNG图像,并获得了Base64 PNG字符串表示。它仍然很大,我想知道它是否可以进一步压缩。这甚至可能吗?

背景

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

javascript image compression base64 selenium-webdriver
3个回答
9
投票

简单的答案:不 - 不会失去“可打印的字符串”性质

通常,PNG已经使用了与ZIP文件中使用的复杂压缩。因此,在应用base64编码之前对其进行压缩将仅为您提供非常有限的大小缩减。

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


1
投票

如果它是网络问题而不是字符串的大小,那么当我将图像发送到mongo数据库时,这对我有用。

使用Express.js,bodyParser的限制默认为1056k,因此您可以通过更改下面的限制来解决问题。

app.use(bodyParser.urlencoded({ limit: '50mb', 
  extended: true
}));
app.use(bodyParser.json({ limit: '50mb' }));

0
投票

您可以使用运行长度编码算法保存几百个字节。

例如,

const encode = (plainText) => {
  const consecutiveChars = /([\w\s])\1*/g;
  return plainText.replace(consecutiveChars,
    match => (match.length > 1 ? match.length + match[0] : match[0]));
};

(信用:https://github.com/exercism/javascript/blob/master/exercises/run-length-encoding/example.js

测试:expect(encode('AABBBCCCC')).toEqual('2A3B4C')

© www.soinside.com 2019 - 2024. All rights reserved.