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

Javascript 是否可以进一步压缩Base64 PNG字符串?,javascript,image,compression,base64,selenium-webdriver,Javascript,Image,Compression,Base64,Selenium Webdriver,我有一个PNG图像,得到了它的Base64 PNG字符串表示。它仍然很大,我想知道它是否可以被进一步压缩。这可能吗 背景 我正在使用Selenium 2(Java)创建当前网页的屏幕截图,将其转换为base64字符串,并将该字符串发送给JavaScript执行器以重新创建该图像并进行一些图像处理。但是如果字符串太大,服务器将返回一个异常。简单的答案是:否-如果没有失去“可打印字符串”的性质,则不会 通常PNG已经使用了复杂的压缩,就像在ZIP文件中使用的一样。因此,在应用base64编码之前对其

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

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

简单的答案是:否-如果没有失去“可打印字符串”的性质,则不会

通常PNG已经使用了复杂的压缩,就像在ZIP文件中使用的一样。因此,在应用base64编码之前对其进行压缩只会减少非常有限的大小


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

如果这是网络问题,而不是字符串的大小,这在我将图像发送到mongo数据库时对我有效

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

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

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

比如说,

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


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

给定原始图像数据,与base64编码相比,压缩可以高出多少?base64将数据放大约33%;根据算法的不同,一个好的压缩可能会让你减少大约10%(最大值)。非常感谢。这对于我的目的来说是不够的,所以我必须想一个替代方案。也许把字符串分成多个块。我想知道你所说的“可打印字符串性质”是什么意思。你能详细说明一下吗?一个可打印字符串只使用可打印字符,因此很多字符不能使用。未使用的字符最终意味着未使用的位(低熵),不使用位与压缩相反(试图增加最大化/优化熵)。