同事需要处理很多的图片,由于UI那边提供图片比较大,为了性能好一点,程序包小一点,因此希望我帮忙做成小程序来完成此工作。

  其实之前做过一个grunt写的图片压缩合并工具,当时是为了处理270多个国家/地区的国旗/logo,这次打算用gulp写一个,很久没碰过了,分了一下,大概两件事需要我去做:

   1.图片压缩

   2.图片雪碧图生成

  然后在很容易就百度到了gulp-imagemin插件,这个做压缩很容易,压缩比什么的就不细看了,当我寻找合并工具的时候,百度真的很傻,搜索到的全部是gulp-css-spriter,而这个工具是用于对css中包含的图片进行处理的,对于这个需求并不是很符合。好吧,我google下,很快找到答案了,gulp.spritesmith这个插件刚好满足需求。

  代码如下:

  

 1 var gulp=require('gulp'),
 2     spriter=require('gulp-css-spriter'),
 3     imagemin = require('gulp-imagemin'),
 4     spritesmith = require('gulp.spritesmith');
 5 
 6 
 7 gulp.task('imagesmin', function(){
 8 
 9     return gulp.src("img/*")
10         .pipe(imagemin())
11         .pipe(gulp.dest("temp"))
12         .pipe(spriter({
13             'spriteSheet': './dist/spritesheet.png',
14             'pathToSpriteSheetFromCSS': '../images/spritesheet.png'
15         }))
16         .pipe(gulp.dest('dist/css'))
17 })
18 //gulp.task('spriter', function() {
19 //    return gulp.src('./src/css/styles.css')
20 //        .pipe(spriter({
21 //            'spriteSheet': './dist/spritesheet.png',
22 //            'pathToSpriteSheetFromCSS': '../images/spritesheet.png'
23 //        }))
24 //        .pipe(gulp.dest('dist/css'));
25 //});
26 gulp.task('sprite', function () {
27     var spriteData = gulp.src('temp/*').pipe(spritesmith({
28         imgName: 'sprite.png',
29         cssName: 'sprite.css',
30         padding: 20
31     }));
32     return spriteData.pipe(gulp.dest('dist'));
33 });
34 gulp.task('default', ["sprite"]);

  然后,就是安装插件了,这个不想重复什么,npm  install就可以了,没什么技术含量,唯一值得一提的是,运行的时候遇到一个gulp安装好了,结果报错没有命令gulp,网上查了下,需要修改环境变量,我就把环境变量了下就可以运行了。

  另外,gulp.spritesmith很强大,支持生成的css文件模板,可以设置图标的排列方式,间距,总之,很齐全的一个工具,附上npm地址:

   https://www.npmjs.com/package/gulp.spritesmith 

  英文文档还是不错的,学习了,记录一下。

posted on 2016-01-13 14:03  onedayof2010  阅读(1836)  评论(0编辑  收藏  举报