0

我想使用Sharp图像处理库压缩图像,将其传递给外部quant库,然后为其获取清晰的元数据。我想这样做是为了将压缩的图像大小实际覆盖到图像上(仅在开发期间)。

对于 WEBP,这很容易,因为一切都在快速的管道中。

 // specify the compression
 myImage.webp({ quality: 80 });

 // actually compress it
 var tempBuffer = await myImage.toBuffer({ resolveWithObject: true});

 // create a new sharp object to read the metadata
 var compressedImage = sharp(tempBuffer.data);

 // Image data is now available in 
 console.log(compressedImage.info.size / 1024);

但是当使用这个quant库时,我将它输送到第三方库中,所以它不再是一个尖锐的物体。我需要以最有效的方式再次取出原始缓冲区。我是 Node.js 的新手,不知道该怎么做。

 resizedImage.png()
             .pipe(new quant(['--quality=50-70', '--speed', '1', '-']));

我需要使用类似https://www.npmjs.com/package/stream-to-array的东西吗?

这对我来说似乎很疯狂!我错过了什么吗?

4

1 回答 1

0

弄清楚了。您可以像这样通过管道将其重新输入sharp()

resizedImage.png()
            .pipe(new quant(['--quality=50-70', '--speed', '1', '-']))
            .pipe(sharp());

然后你可以打电话metadata()或进一步调整大小等(不是你通常会这样做!)

于 2018-06-27T03:23:33.750 回答