3

我正在尝试使用 node.js sharp 包压缩 PNG 文件(1MB 以上)。

var sharp = require('/usr/local/lib/node_modules/sharp');
sharp('IMG1.png')
.png({ compressionLevel: 9, adaptiveFiltering: true, force: true })
.withMetadata()
.toFile('IMG2.png', function(err){
    if(err){
        console.log(err);
    } else {
        console.log('done');
    }
}); 

上面的代码不能正常工作。我的文件大小约为 3.5MB,我正在尝试将其压缩到 1MB 左右。

4

2 回答 2

8

使用您提供的代码进行了尝试,它可以完美运行,并且还可以在一定程度上压缩图像

var sharp = require('sharp');
sharp('input.png')
    .png({ compressionLevel: 9, adaptiveFiltering: true, force: true })
    .withMetadata()
    .toFile('output.png', function(err) {
        console.log(err);
    });

我附上了截图。它将显示图像大小的差异。 截屏

于 2018-06-13T07:29:24.573 回答
0

如果您曾经尝试压缩位图/光栅图像,您会注意到它的压缩效果不佳,它实际上只压缩了元数据。

PNG 是无损格式,因此该quality参数控制颜色深度。默认是无损的quality: 100,保留完整的颜色深度。当这个百分比减少时,它使用一种颜色palette并减少颜色。

var sharp = require('/usr/local/lib/node_modules/sharp');
sharp('IMG1.png')
.withMetadata() // I'm guessing set the metadata before compression?
.png({
  quality: 95, // play around with this number until you get the file size you want
  compression: 6, // this doesn't need to be set, it is by default, no need to increase compression, it will take longer to process
})
.toFile('IMG2.png', function(err){
    if(err){
        console.log(err);
    } else {
        console.log('done');
    }
}); 
于 2021-07-21T14:09:06.517 回答