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

时间:2012-03-19 12:18:28

标签: javascript image compression base64 selenium-webdriver

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

背景

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

3 个答案:

答案 0 :(得分:9)

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

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

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

答案 1 :(得分:1)

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

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

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

答案 2 :(得分: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')