我有一个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]));
};
(信用:https://github.com/exercism/javascript/blob/master/exercises/run-length-encoding/example.js)
测试:expect(encode('AABBBCCCC')).toEqual('2A3B4C')