gulp 压缩图片

压缩 图片文件可降低文件大小,提高图片加载速度。

找到规律转换为 gulp 代码

规律

找到 images/ 目录下的所有文件,压缩它们,将压缩后的文件存放在 dist/images/ 目录下。

gulp 代码

一、安装 gulp-imagemin 模块

提示:你需要使用命令行的 cd 切换至对应目录再进行安装操作和 gulp 启动操作。

在命令行输入 npm install gulp-imagemin

安装成功后你会看到如下信息:(安装时间可能会比较长取决于网络)

npm install gulp-imagemin
npm WARN deprecated cross-spawn-async@2.2.4: cross-spawn no longer requires a build toolchain, use it instead!

> gifsicle@3.0.4 postinstall D:\wamp\www\BootsDataTable\node_modules\gifsicle
> node lib/install.js

√ gifsicle pre-build test passed successfully

> jpegtran-bin@3.1.0 postinstall D:\wamp\www\BootsDataTable\node_modules\jpegtran-bin
> node lib/install.js

√ jpegtran pre-build test passed successfully

> optipng-bin@3.1.2 postinstall D:\wamp\www\BootsDataTable\node_modules\optipng-bin
> node lib/install.js

√ optipng pre-build test passed successfully
test@1.0.0 D:\wamp\www\BootsDataTable
`-- gulp-imagemin@3.0.3
+-- imagemin@5.2.2
| +-- file-type@3.8.0
| +-- globby@5.0.0
| | +-- array-union@1.0.2
| | +-- arrify@1.0.1
| | +-- glob@7.0.6
| | | +-- fs.realpath@1.0.0
| | | +-- minimatch@3.0.3
| | | `-- path-is-absolute@1.0.0
| | `-- object-assign@4.1.0
| `-- promise.pipe@3.0.0
+-- imagemin-gifsicle@5.1.0
| +-- exec-buffer@3.0.0
| | +-- execa@0.3.0
| | | +-- cross-spawn-async@2.2.4
| | | | `-- lru-cache@4.0.1
| | | | +-- pseudomap@1.0.2
| | | | `-- yallist@2.0.0
| | | +-- npm-run-path@1.0.0
| | | +-- object-assign@4.1.0
| | | +-- path-key@1.0.0
| | | `-- strip-eof@1.0.0
| | `-- tempfile@1.1.1
| | `-- uuid@2.0.3
| +-- gifsicle@3.0.4
| | +-- bin-build@2.2.0
| | | +-- archive-type@3.2.0
| | | +-- decompress@3.0.0
| | | | +-- buffer-to-vinyl@1.1.0
| | | | | `-- vinyl@1.2.0
| | | | +-- concat-stream@1.5.2
| | | | | `-- typedarray@0.0.6
| | | | +-- decompress-tar@3.1.0
| | | | | +-- is-tar@1.0.0
| | | | | +-- object-assign@2.1.1
| | | | | +-- strip-dirs@1.1.1
| | | | | | +-- is-absolute@0.1.7
| | | | | | | `-- is-relative@0.1.3
| | | | | | +-- is-natural-number@2.1.1
| | | | | | `-- sum-up@1.0.3
| | | | | +-- tar-stream@1.5.2
| | | | | | +-- bl@1.1.2
| | | | | | `-- end-of-stream@1.1.0
| | | | | +-- through2@0.6.5
| | | | | | `-- readable-stream@1.0.34
| | | | | | `-- isarray@0.0.1
| | | | | `-- vinyl@0.4.6
| | | | | `-- clone@0.2.0
| | | | +-- decompress-tarbz2@3.1.0
| | | | | +-- is-bzip2@1.0.0
| | | | | +-- object-assign@2.1.1
| | | | | +-- seek-bzip@1.0.5
| | | | | +-- through2@0.6.5
| | | | | | `-- readable-stream@1.0.34
| | | | | | `-- isarray@0.0.1
| | | | | `-- vinyl@0.4.6
| | | | | `-- clone@0.2.0
| | | | +-- decompress-targz@3.1.0
| | | | | +-- is-gzip@1.0.0
| | | | | +-- object-assign@2.1.1
| | | | | +-- through2@0.6.5
| | | | | | `-- readable-stream@1.0.34
| | | | | | `-- isarray@0.0.1
| | | | | `-- vinyl@0.4.6
| | | | | `-- clone@0.2.0
| | | | +-- decompress-unzip@3.4.0
| | | | | +-- is-zip@1.0.0
| | | | | +-- stat-mode@0.2.2
| | | | | +-- vinyl@1.2.0
| | | | | `-- yauzl@2.6.0
| | | | | +-- buffer-crc32@0.2.5
| | | | | `-- fd-slicer@1.0.1
| | | | | `-- pend@1.2.0
| | | | +-- stream-combiner2@1.1.1
| | | | | `-- duplexer2@0.1.4
| | | | +-- vinyl-assign@1.2.1
| | | | | `-- object-assign@4.1.0
| | | | `-- vinyl-fs@2.4.3
| | | | +-- duplexify@3.4.5
| | | | | +-- end-of-stream@1.0.0
| | | | | `-- stream-shift@1.0.0
| | | | +-- glob-stream@5.3.5
| | | | | +-- glob@5.0.15
| | | | | +-- glob-parent@3.0.0
| | | | | | `-- is-glob@3.0.0
| | | | | | `-- is-extglob@2.0.0
| | | | | +-- ordered-read-streams@0.3.0
| | | | | +-- through2@0.6.5
| | | | | | `-- readable-stream@1.0.34
| | | | | | `-- isarray@0.0.1
| | | | | +-- to-absolute-glob@0.1.1
| | | | | | `-- extend-shallow@2.0.1
| | | | | `-- unique-stream@2.2.1
| | | | | `-- json-stable-stringify@1.0.1
| | | | | `-- jsonify@0.0.0
| | | | +-- gulp-sourcemaps@1.6.0
| | | | | +-- convert-source-map@1.3.0
| | | | | `-- vinyl@1.2.0
| | | | +-- is-valid-glob@0.3.0
| | | | +-- lazystream@1.0.0
| | | | +-- lodash.isequal@4.4.0
| | | | +-- merge-stream@1.0.0
| | | | +-- object-assign@4.1.0
| | | | +-- strip-bom-stream@1.0.0
| | | | +-- through2-filter@2.0.0
| | | | +-- vali-date@1.0.0
| | | | `-- vinyl@1.2.0
| | | +-- download@4.4.3
| | | | +-- caw@1.2.0
| | | | | +-- get-proxy@1.1.0
| | | | | | `-- rc@1.1.6
| | | | | | +-- deep-extend@0.4.1
| | | | | | `-- strip-json-comments@1.0.4
| | | | | +-- is-obj@1.0.1
| | | | | `-- tunnel-agent@0.4.3
| | | | +-- filenamify@1.2.1
| | | | | +-- filename-reserved-regex@1.0.0
| | | | | +-- strip-outer@1.0.0
| | | | | `-- trim-repeated@1.0.0
| | | | +-- got@5.6.0
| | | | | +-- create-error-class@3.0.2
| | | | | | `-- capture-stack-trace@1.0.0
| | | | | +-- duplexer2@0.1.4
| | | | | +-- is-plain-obj@1.1.0
| | | | | +-- is-redirect@1.0.0
| | | | | +-- is-retry-allowed@1.1.0
| | | | | +-- is-stream@1.1.0
| | | | | +-- lowercase-keys@1.0.0
| | | | | +-- node-status-codes@1.0.0
| | | | | +-- object-assign@4.1.0
| | | | | +-- timed-out@2.0.0
| | | | | +-- unzip-response@1.0.1
| | | | | `-- url-parse-lax@1.0.0
| | | | | `-- prepend-http@1.0.4
| | | | +-- gulp-decompress@1.2.0
| | | | +-- gulp-rename@1.2.2
| | | | +-- is-url@1.2.2
| | | | +-- object-assign@4.1.0
| | | | +-- read-all-stream@3.1.0
| | | | +-- vinyl@1.2.0
| | | | +-- vinyl-fs@2.4.3
| | | | | `-- glob-stream@5.3.5
| | | | | +-- glob@5.0.15
| | | | | +-- glob-parent@3.0.0
| | | | | | `-- is-glob@3.0.0
| | | | | | `-- is-extglob@2.0.0
| | | | | +-- ordered-read-streams@0.3.0
| | | | | +-- through2@0.6.5
| | | | | | `-- readable-stream@1.0.34
| | | | | | `-- isarray@0.0.1
| | | | | `-- unique-stream@2.2.1
| | | | `-- ware@1.3.0
| | | | `-- wrap-fn@0.1.5
| | | | `-- co@3.1.0
| | | +-- exec-series@1.0.3
| | | | +-- async-each-series@1.1.0
| | | | `-- object-assign@4.1.0
| | | +-- rimraf@2.5.4
| | | | `-- glob@7.0.6
| | | | `-- minimatch@3.0.3
| | | `-- url-regex@3.2.0
| | | `-- ip-regex@1.0.3
| | +-- bin-wrapper@3.0.2
| | | +-- bin-check@2.0.0
| | | | `-- executable@1.1.0
| | | +-- bin-version-check@2.1.0
| | | | +-- bin-version@1.0.4
| | | | | `-- find-versions@1.2.1
| | | | | `-- semver-regex@1.0.0
| | | | `-- semver-truncate@1.1.2
| | | | `-- semver@5.3.0
| | | +-- each-async@1.1.1
| | | | +-- onetime@1.1.0
| | | | `-- set-immediate-shim@1.0.1
| | | +-- lazy-req@1.1.0
| | | `-- os-filter-obj@1.0.3
| | `-- logalot@2.1.0
| | +-- figures@1.7.0
| | | `-- object-assign@4.1.0
| | `-- squeak@1.3.0
| | +-- console-stream@0.1.1
| | `-- lpad-align@1.1.0
| | `-- lpad@2.0.1
| `-- is-gif@1.0.0
+-- imagemin-jpegtran@5.0.2
| +-- is-jpg@1.0.0
| `-- jpegtran-bin@3.1.0
+-- imagemin-optipng@5.2.1
| +-- is-png@1.0.0
| `-- optipng-bin@3.1.2
+-- imagemin-svgo@5.2.0
| +-- is-svg@2.0.1
| | `-- html-comment-regex@1.1.1
| `-- svgo@0.7.0
| +-- coa@1.0.1
| | `-- q@1.4.1
| +-- colors@1.1.2
| +-- csso@2.2.1
| | `-- clap@1.1.1
| +-- js-yaml@3.6.1
| | +-- argparse@1.0.7
| | | `-- sprintf-js@1.0.3
| | `-- esprima@2.7.3
| +-- sax@1.2.1
| `-- whet.extend@0.9.9
+-- plur@2.1.2
| `-- irregular-plurals@1.2.0
+-- pretty-bytes@2.0.1
`-- through2-concurrent@1.1.1

npm WARN test@1.0.0 No description
npm WARN test@1.0.0 No repository field.

二、创建 gulpfile.js 文件编写代码

在对应目录创建 gulpfile.js 文件并写入如下内容:

// 获取 gulp
var gulp = require('gulp');

// 获取 gulp-imagemin 模块
var imagemin = require('gulp-imagemin')

// 压缩图片任务
// 在命令行输入 gulp images 启动此任务
gulp.task('images', function () {
// 1. 找到图片
gulp.src('images/*.*')
// 2. 压缩图片
.pipe(imagemin({
progressive: true
}))
// 3. 另存图片
.pipe(gulp.dest('dist/images'))
});

// 在命令行使用 gulp auto 启动此任务
gulp.task('auto', function () {
// 监听文件修改,当文件被修改则执行 images 任务
gulp.watch('images/*.*)', ['images'])
});

// 使用 gulp.task('default') 定义默认任务
// 在命令行使用 gulp 启动 images 任务和 auto 任务
gulp.task('default', ['images', 'auto'])
你可以访问 gulp-imagemin 以查看更多用法。

三、在 images/ 目录下存放图片

在 gulpfile.js 对应目录创建 images 文件夹,并在 images/ 目录下存放图片。

你可以访问 https://github.com/nimojs/gulp-book/tree/master/demo/chapter4/images/ 下载示例图片

四、运行 gulp 查看效果

在命令行输入 gulp +回车

你将看到命令行出现如下提示

gulp
[11:07:37] Using gulpfile D:\wamp\www\BootsDataTable\gulpfile.js
[11:07:37] Starting 'images'...
[11:07:37] Finished 'images' after 3.57 ms
[11:07:37] Starting 'auto'...
[11:07:37] Finished 'auto' after 57 ms
[11:07:37] Starting 'default'...
[11:07:37] Finished 'default' after 16 μs
[11:07:38] gulp-imagemin: Minified 20 images (saved 12.48 kB - 24.2%)

续Gulp使用入门三步压缩图片的更多相关文章

  1. 续Gulp使用入门三步压缩CSS

    gulp 压缩css 一.安装 gulp-minify-css 模块 提示:你需要使用命令行的 cd 切换到对应目录后进行安装操作. 在命令行输入 npm install gulp-minify-cs ...

  2. 续Gulp使用入门-综合运用>使用Gulp构建一个项目

    这是我的文件目录结构图  下面是我gulpfile.js的配置 'use strict' var gulp=require('gulp'); var gutil=require('gulp-util' ...

  3. MongoDB入门三步曲2--基本操作(续)--聚合、索引、游标及mapReduce

    mongodb 基本操作(续)--聚合.索引.游标及mapReduce 目录 聚合操作 MapReduce 游标 索引 聚合操作 像大多关系数据库一样,Mongodb也提供了聚合操作,这里仅列取常见到 ...

  4. 续Gulp使用入门编译Sass

    使用 gulp 编译 Sass Sass 是一种 CSS 的开发工具,提供了许多便利的写法,大大节省了开发者的时间,使得 CSS 的开发,变得简单和可维护. 安装 npm install gulp-s ...

  5. MongoDB入门三步曲1--安装、基本操作

    mongodb 基本操作 目录 mongodb安装 mongod启动 mongo shell启动 mongod 停止 mongodb基本操作:CRUD 数据插入 数据查询 数据更新 数据删除 集合删除 ...

  6. MongoDB入门三步曲3--部署技术:主备、副本集和数据分片

    mongodb部署--主备.副本及数据分片 主备复制 副本集 数据分片 主备复制 主备复制是最基本的一种多点部署方案,在读写分离.热备份.数据恢复等方面具有重要作用. 在真实的生产环境,主备库肯定需要 ...

  7. Joomla - 优化(时区、google字体、压缩图片、压缩自定义代码)

    Joomla - 优化(时区.google字体.压缩图片.压缩自定义代码) 一.时区 发布文章是往往会发现发布时间和当前时间对不上,原因是 Joomla 用的是国际标准时间,和中国时区大约相差8小时, ...

  8. gulp-imagemin图片压缩----gulp系列(三)

    本节实现图片压缩,在实现压缩前,先配置images任务,设置源目录和输出目录. 在系列(二)代码的基础上,再进行扩展. 1.找到gulp->config.js,对images进行源目录(src- ...

  9. Gulp使用入门操作十一步压缩JS

    前提需要安装nodejs 一. 全局安装Gulp npm install -g gulp 二.新建一个 gulpfile.js 文件 chapter2└── gulpfile.js 三.在 gulpf ...

随机推荐

  1. ThroughRain学期冲刺总结

    团队名:ThroughRain 项目确定:<餐厅到店点餐系统> 项目背景:本次项目是专门为餐厅开发的一套订餐系统.大家有没有发现在节假日去餐厅吃饭会超级麻烦,人很多, 热门的餐厅基本没有座 ...

  2. 0525Sprint回顾

    1.回顾组织 主题:“我们下次怎么样才能更加认真对待?” 时间:设定为1至2个小时. 参与者:整个团队. 场所:能够在不受干扰的情况下讨论. 秘书:指定某人当秘书,筹备.记录.整理.  2.回顾流程 ...

  3. Sprint 3计划

    一.计划目标: 1.完成基本的首页面的信息查询功能 2.学生家教用户注册和登录,将信息存储到数据库 3.完成家教的资格评定设定和个人教学内容备份信息 二.燃尽图 三.项目具体工作细则 待明天工作会议分 ...

  4. 禁止苹果浏览器Safari将数字识别成电话号码的方法

    偶然发现用ipad访问我的网站时,发现网站上的一串数字变颜色了(原来是红色的),现在变成了蓝色.一开始以为网站出了什么问题,后来在PC端查看,发现颜色依旧是红色.在ipad上点击还会弹出菜单呼叫的选项 ...

  5. 一个让echarts中国地图包含省市轮廓的技巧

    背景知识及应用简介 本文主要介绍一个使用ECharts地图组件的取巧方法,该技巧源于实际需求中遇到的问题,一般没有该需求的话这个技巧也是用不到的.有前端基础和以及对ECharts有了解的人基本可以读懂 ...

  6. sencha panel的头header上添加刷新按钮

    var plet3=Ext.create('portaltest3.view.Portlet',                   { title: '提醒',                   ...

  7. PhpWind 8.7中禁止后台管理员随意修改会员用户名功能

    有人反映PHPWind 8.7中后台可以直接修改用户名的功能太过随意,干脆禁掉. OK,研究一下他的代码,admin/usermange.php  tempalate/admin/usermange. ...

  8. 删除单链表倒数第n个节点

    基本问题 如何删除单链表中的倒数第n个节点? 常规解法 先遍历一遍单链表,计算出单链表的长度,然后,从单链表头部删除指定的节点. 代码实现 /** * * Description: 删除单链表倒数第n ...

  9. [译] 第三十天:Play Framework - Java开发者梦寐以求的框架 - 百花宫

    前言 30天挑战的最后一天,我决定学习 Play Framework .我本来想写Sacla,但是研究几个小时后,我发现没法在一天内公正评价Scala,下个月花些时间来了解并分享经验.本文我们先来看看 ...

  10. ASP.NET MVC another entity of the same type already has the same primary key value

    ASP.NET MVC项目 Repository层中,Update.Delete总是失败 another entity of the same type already has the same pr ...