我有一张PNG图片,并得到了它的Base64 PNG字符串表示。它仍然相当大,我想知道是否可以进一步压缩。这是否可能?
背景
我正在使用Selenium 2(Java)创建当前网页的屏幕截图,将其转换为Base64字符串,并将该字符串发送给JavaScript执行程序以重新创建该图像并进行一些图像处理。但是,如果该字符串大小太大,服务器会返回异常。
我有一张PNG图片,并得到了它的Base64 PNG字符串表示。它仍然相当大,我想知道是否可以进一步压缩。这是否可能?
我正在使用Selenium 2(Java)创建当前网页的屏幕截图,将其转换为Base64字符串,并将该字符串发送给JavaScript执行程序以重新创建该图像并进行一些图像处理。但是,如果该字符串大小太大,服务器会返回异常。
简短回答:不行 - 这样就会失去“可打印字符串”的特性。
通常PNG已经使用了像ZIP文件中使用的复杂压缩算法。因此,在应用base64编码之前进行压缩只能获得非常有限的大小减少。
在应用base64编码之后再进行压缩将使它变为二进制数据 - 在这种情况下,您可以跳过base64编码步骤。
Express.js
,bodyParser的限制默认为1056k,因此您可以通过以下更改限制来解决问题。app.use(bodyParser.urlencoded({ limit: '50mb',
extended: true
}));
app.use(bodyParser.json({ limit: '50mb' }));
使用Run Length Encoding算法可能会节省几百字节。
例如,
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')