我正在尝试获得压缩png的最佳设置。

我发现这里有一些可用于imagemin的插件:
https://www.npmjs.com/browse/keyword/imageminplugin

我尝试了所有PNG选项,但压缩率似乎很差。

  • 示例图像原始大小-1.4MB
  • TinyPNG.com-413KB
  • pngquant-541KB
  • pngout-无法正常工作-请参见https://github.com/imagemin/imagemin-pngout/issues/2
  • png粉碎-992KB
  • optipng(默认选项)-906KB
  • advpng-906KB

  • pngquant似乎具有最高的压缩率,(显然是最差的质量),其质量与tinypng相似,但是仍然可以接近tinypng的数字。

    本质上,我有3个问题:

    问题1:
    更改advpng和optipng的选项似乎都不会更改文件大小,这是一个示例,我可以正确使用它吗?
    我猜想也许它根本没有使用我的设置,而是回到了默认设置?如果您发现这两个文件的大小相同!:
    .pipe(imagemin(
        imageminOptipng({
            optimizationLevel: 4
        })
    ))
    

    问题2:
    我在正确使用“pngout”吗?有我不知道的使用方法吗?他们页面上的示例似乎无效,此方法也无效:
    .pipe(imagemin([
        imageminPngout({
            strategy: 1
        })
    ]))
    

    问题3:
    有没有更好的方法来处理我尚未发现的png压缩?
    理想情况下,我想以某种方式获得具有pngquant速率的方法,但是质量要好一些。

    最佳答案

    经过长时间的试验和错误,我设法获得了imagemin-pngquant插件,以生成与TinyPNG.com类似的小尺寸图像。仍然更大一点,但是图像的某些部分看起来比TinyPNG.com的结果更好。

    输入图像大小:1.1MB
    TinyPNG.com:223kb
    imagemin-pngquant:251kb

    我使用了下一个插件设置:

    {
        quality: '70-90', // When used more then 70 the image wasn't saved
        speed: 1, // The lowest speed of optimization with the highest quality
        floyd: 1 // Controls level of dithering (0 = none, 1 = full).
    }
    

    同样,从.png生成.webp图像,并以.png作为备份,将其提供给支持此格式的浏览器可能是一个好主意。有关.webp图像格式的更多信息:Google Developer Section

    从优化的图像生成.webp(质量损失最小)后,图像大小为62kB。您可以使用带有gulp-rename的imagemin-webp插件,将具有相同基本名称但扩展名不同的图像流传输到dist文件夹。 gulp任务示例:
    const config = require('./src/gulp/config.json');
    
    const gulp = require('gulp');
    const plugins = require('gulp-load-plugins')();
    const imageminWebp = require('imagemin-webp');
    
    gulp.task('images', function () {
        return gulp.src(config.src.images)
            pipe(plugins.imagemin([imageminWebp({
                method: 6,
            })]))
            .pipe(plugins.rename({ extname: '.webp' }))
            .pipe(gulp.dest(config.dist.images));
    });
    

    关于gulp - 如何使用gulp-imagemin +插件获得最佳的PNG压缩?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39894913/

    10-12 12:29