我正在尝试使用pngquant
. 这是代码:
let output = '';
const quant = cp.spawn('pngquant', ['256', '--speed', '10'], {
stdio: [null, null, 'ignore'],
});
quant.stdout.on('data', data => output += data);
quant.on('close', () => {
fs.writeFileSync('image.png', output);
fs.writeFileSync('image_original.png', image);
process.exit(0);
});
quant.stdin.write(image);
image
是一个Buffer
纯PNG数据。该代码有效,但是,由于某种原因,它会生成不正确的 PNG。不仅如此,它的尺寸也比原来的要大。
当我从终端执行此操作时,我得到了出色的输出文件:
pngquant 256 --speed 10 < image_original.png > image.png
我不知道发生了什么;输出文件中的数据看起来很像 PNG。
编辑:我设法使它工作:
let output = [];
quant.stdout.on('data', data => output.push(data));
quant.stdin.write(image);
quant.on('close', () => {
const image = Buffer.concat(output);
fs.writeFileSync('image.png', image);
});
我认为这与字符串在 NodeJS 中的表示方式有关。很乐意得到一些解释。