Last active
October 9, 2024 21:50
-
-
Save ryantbrown/239dfdad465ce4932c81 to your computer and use it in GitHub Desktop.
Gulp - Resize and Optimize / Minify Images
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* Make sure Graphicsmagick is installed on your system | |
* osx: brew install graphicsmagick | |
* ubuntu: apt-get install graphicsmagick | |
* | |
* Install these gulp plugins | |
* glup, gulp-image-resize, gulp-imagemin and imagemin-pngquant | |
* | |
* Group images according to their output dimensions. | |
* (ex: place all portfolio images into "images/portfolio" | |
* and all background images into "images/bg") | |
* | |
**/ | |
// require gulp plugins | |
var gulp = require('gulp'); | |
var imageresize = require('gulp-image-resize'); | |
var imagemin = require('gulp-imagemin'); | |
var pngquant = require('imagemin-pngquant'); | |
// set the folder name and the relative paths | |
// in the example the images are in ./assets/images | |
// and the public directory is ../public | |
var paths = { | |
folder: 'images/', | |
src: './assets/', | |
dest: '../public/' | |
} | |
// create an array of image groups (see comments above) | |
// specifying the folder name, the ouput dimensions and | |
// whether or not to crop the images | |
var images = [ | |
{ folder: 'bg', width: 1200, crop: false }, | |
{ folder: 'categories', width: 500, height: 330, crop: true }, | |
{ folder: 'projects', width: 800, height: 500, crop: true } | |
]; | |
// images gulp task | |
gulp.task('images', function () { | |
// loop through image groups | |
images.forEach(function(type){ | |
// build the resize object | |
var resize_settings = { | |
width: type.width, | |
crop: type.crop, | |
// never increase image dimensions | |
upscale : false | |
} | |
// only specify the height if it exists | |
if (type.hasOwnProperty("height")) { | |
resize_settings.height = type.height | |
} | |
gulp | |
// grab all images from the folder | |
.src(paths.src+paths.folder+type.folder+'/**/*') | |
// resize them according to the width/height settings | |
.pipe(imageresize(resize_settings)) | |
// optimize the images | |
.pipe(imagemin({ | |
progressive: true, | |
// set this if you are using svg images | |
svgoPlugins: [{removeViewBox: false}], | |
use: [pngquant()] | |
})) | |
// output each image to the dest path | |
// maintaining the folder structure | |
.pipe(gulp.dest(paths.dest+paths.folder+type.folder)); | |
}); | |
}); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Thanks