0

我正在尝试使用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 中的表示方式有关。很乐意得到一些解释。

4

0 回答 0