3

我有一个 aws 图像文件,我正在使用 sharp 压缩图像,但压缩后,文件大小大大增加。在我的情况下,我的图像大小为 6.5MB ,压缩后它变成了 19.5MB。

以下是我的代码:

const width = parseInt(image.height);
const height = parseInt(image.width);

var getObjectParams = {
  Bucket: BUCKET,
  Key: FILE_NAME
}

  s3.getObject(getObjectParams).promise()
    .then(data => {
      sharp(data.Body)
       .resize(width, height)
        .ignoreAspectRatio()
        .toFormat('png')
        .toBuffer()
        .then((buffer) => {
         ........
         ........
    }

我什至尝试过使用.max()

 sharp(data.Body)
 .withoutEnlargement()
 .resize(width, height)
 .toFormat('png')
 .toBuffer()

同样的问题,文件大小越来越大。在我的情况下,应该保持图像纵横比。任何建议,将不胜感激。谢谢

4

1 回答 1

0

这是一个常见的问题,Sharp但这是一个很棒的包。阅读. Sharp _ _png

如果您需要玩耍; options.quality, options.colours,options.dither以压缩大量的任何 PNG 图像,并根据其文档,

需要编译支持 libimagequant 的 libvips

所以你需要帮助libimagequant来实现你的目标。据该网站称,libimagequant是一个小型、可移植的 C 库,用于将 RGBA 图像高质量转换为 8 位索引颜色(调色板)图像。

相反,您可以使用这个名为 imagemin 的 NPM 包,我相信它使用相同的方法来压缩 PNG 图像。使用下面的一小段代码,您可以减小 PNG 的大小。

const files = await imagemin(['images/*.{png}'], {
    destination: 'build/images',
        plugins: [
            imageminJpegtran(),
            imageminPngquant({
                quality: [0.6, 0.8]
            })
        ]
});

玩弄quality: [0.6, 0.8]喜欢quality: [0.2, 0.2]以减小大小,您可以传递单个图像文件,例如const files = await imagemin(['fileName.png']

于 2020-06-02T09:39:47.690 回答