From 279a91b61c208c0e2a18d3734e6073f5e1d283a2 Mon Sep 17 00:00:00 2001 From: Egor Pishchalnikov Date: Thu, 16 Jan 2020 07:15:40 +0300 Subject: [PATCH] Replace jpegtran with mozjpeg (#336) --- fixture.jpg | Bin 0 -> 50986 bytes index.js | 4 ++-- package.json | 2 +- readme.md | 8 ++++---- test.js | 12 ++++++++++++ 5 files changed, 19 insertions(+), 7 deletions(-) create mode 100644 fixture.jpg diff --git a/fixture.jpg b/fixture.jpg new file mode 100644 index 0000000000000000000000000000000000000000..67b6e482dc3e513cf7dc24749c19a4557fee2838 GIT binary patch literal 50986 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 literal 0 HcmV?d00001 diff --git a/index.js b/index.js index 826c492..c544740 100644 --- a/index.js +++ b/index.js @@ -8,7 +8,7 @@ const imagemin = require('imagemin'); const plur = require('plur'); const PLUGIN_NAME = 'gulp-imagemin'; -const defaultPlugins = ['gifsicle', 'jpegtran', 'optipng', 'svgo']; +const defaultPlugins = ['gifsicle', 'mozjpeg', 'optipng', 'svgo']; const loadPlugin = (plugin, ...args) => { try { @@ -119,6 +119,6 @@ module.exports = (plugins, options) => { }; module.exports.gifsicle = exposePlugin('gifsicle'); -module.exports.jpegtran = exposePlugin('jpegtran'); +module.exports.mozjpeg = exposePlugin('mozjpeg'); module.exports.optipng = exposePlugin('optipng'); module.exports.svgo = exposePlugin('svgo'); diff --git a/package.json b/package.json index cff2490..d04088b 100644 --- a/package.json +++ b/package.json @@ -52,7 +52,7 @@ }, "optionalDependencies": { "imagemin-gifsicle": "^6.0.1", - "imagemin-jpegtran": "^6.0.0", + "imagemin-mozjpeg": "^8.0.0", "imagemin-optipng": "^7.0.0", "imagemin-svgo": "^7.0.0" }, diff --git a/readme.md b/readme.md index f22af96..4ee52e0 100644 --- a/readme.md +++ b/readme.md @@ -33,7 +33,7 @@ exports.default = () => ( // … .pipe(imagemin([ imagemin.gifsicle({interlaced: true}), - imagemin.jpegtran({progressive: true}), + imagemin.mozjpeg({quality: 75, progressive: true}), imagemin.optipng({optimizationLevel: 5}), imagemin.svgo({ plugins: [ @@ -86,7 +86,7 @@ Note that you may come across an older, implicit syntax. In versions < 3, the sa Comes bundled with the following **lossless** optimizers: - [gifsicle](https://github.com/imagemin/imagemin-gifsicle) — *Compress GIF images* -- [jpegtran](https://github.com/imagemin/imagemin-jpegtran) — *Compress JPEG images* +- [mozjpeg](https://github.com/imagemin/imagemin-mozjpeg) — *Compress JPEG images* - [optipng](https://github.com/imagemin/imagemin-optipng) — *Compress PNG images* - [svgo](https://github.com/imagemin/imagemin-svgo) — *Compress SVG images* @@ -99,9 +99,9 @@ Unsupported files are ignored. #### plugins Type: `Array`
-Default: `[imagemin.gifsicle(), imagemin.jpegtran(), imagemin.optipng(), imagemin.svgo()]` +Default: `[imagemin.gifsicle(), imagemin.mozjpeg(), imagemin.optipng(), imagemin.svgo()]` -[Plugins](https://www.npmjs.com/browse/keyword/imageminplugin) to use. This will overwrite the default plugins. Note that the default plugins comes with good defaults and should be sufficient in most cases. See the individual plugins for supported options. +[Plugins](https://www.npmjs.com/browse/keyword/imageminplugin) to use. This will completely overwrite all the default plugins. So, if you want to use custom plugins and you need some of defaults too, then you should pass default plugins as well. Note that the default plugins come with good defaults and should be sufficient in most cases. See the individual plugins for supported options. #### options diff --git a/test.js b/test.js index 6618795..353414a 100644 --- a/test.js +++ b/test.js @@ -28,6 +28,18 @@ test('minify images', async t => { t.true(file[0].contents.length < buffer.length); }); +test('minify JPEG with custom settings', async t => { + const mozjpegOptions = { + quality: 30, + progressive: false, + smooth: 45 + }; + const {buffer, stream} = await createFixture([gulpImagemin.mozjpeg(mozjpegOptions)], 'fixture.jpg'); + const file = await getStream.array(stream); + + t.true(file[0].contents.length < buffer.length); +}); + test('use custom plugins', async t => { const {stream} = await createFixture([imageminPngquant()]); const compareStream = (await createFixture()).stream;