我们如何在Node.js中压缩base64图像的大小?

问题描述 投票:0回答:2

我从 api 收到一个 base64 编码的响应,其中包含大量字符(数据)。所以我想缩放/减小这个 Base64 图像的大小。最好的方法是什么?

javascript node.js image base64 image-compression
2个回答
1
投票

嗯,base64 只是一些字节的文本表示。

首先需要将其转化为字节的缓冲区。例如。像这样:

const imageBuffer = Buffer.from(yourString, 'base64');

然后您应该将其保存在磁盘上并使用其他一些工具(例如 imagemagick)对其进行转换:

fs.writeFileSync('your-image.png', imageBuffer); // in case you know it's PNG, ofc
// transform somehow, probably invoking third-party tool using child_process.execSync

或者您可以使用像 Sharp 这样的库来优化该缓冲区中的图像。这是存储库中的示例:

sharp(inputBuffer)
  .resize(320, 240)
  .toFile('output.webp', (err, info) => { ... });

根据您操作的图像类型以及您尝试进行的转换,您可能需要不同的工具,不仅是 Sharp,还包括 Gifsicle 或 Guetzli。

几年前,我的团队创建了一个小型 CLI 工具,用于根据我们的需求优化图像。该工具无法解决您的问题,但也许它的代码(我们使用不同的编码器)可以在某种程度上帮助您:

https://github.com/funbox/optimizt/blob/master/lib/optimize.js


0
投票

安装库

npm install sharp

转换为图像,根据需要调整大小,然后转换为base64

let arrData = `${imageBase64}`.split(',');
var imgBuffer = Buffer.from(arrData[1], 'base64');
const sharp = require('sharp');
let bufferImgCompressed = await sharp(imgBuffer)
.resize({ width: 100, height: 200 })
.toBuffer()
.then(data => { return data; })
.catch(err => { console.log('Error on compress'); });

let imgBase64Compressed = bufferImgCompressed.toString('base64');

使用

${imageBase64}.split(',')
是因为将base64转换为缓冲字符串不应该包含'data:image/...'

© www.soinside.com 2019 - 2024. All rights reserved.