我有一个PNG图像,并获得了Base64 PNG字符串表示。它仍然很大,我想知道它是否可以进一步压缩。这甚至可能吗?
我正在使用Selenium 2(Java)创建当前网页的屏幕截图,将其转换为base64字符串并将该字符串发送到JavaScript执行程序以重新创建该图像并执行一些图像处理。但是,如果该字符串大小太大,服务器将返回异常。
答案 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')