亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

淺談webpack4 圖片處理匯總

2019-11-19 12:58:08
字體:
來源:轉載
供稿:網友

本次課程的代碼目錄(如下圖所示):

>>> 本節課源碼

>>> 所有課程源碼

本節課會講述 webpack4 中的圖片常用的基礎操作:

  1. 圖片處理 和 Base64編碼
  2. 圖片壓縮
  3. 合成雪碧圖

1. 準備工作

如項目代碼目錄展示的那樣,除了常見的 app.js 作為入口文件,我們將用到的 3 張圖片放在 /src/assets/img/ 目錄下,并在樣式文件 base.css 中引用這些圖片。

剩下的內容交給 webpack 打包處理即可。樣式文件和入口 js 文件的代碼分別如下所示:

/* base.css */*, body { margin: 0; padding: 0;}.box { height: 400px; width: 400px; border: 5px solid #000; color: #000;}.box div { width: 100px; height: 100px; float: left;}.box .ani1 { background: url("./../assets/imgs/1.jpg") no-repeat;}.box .ani2 { background: url("./../assets/imgs/2.jpg") no-repeat;}.box .ani3 { background: url("./../assets/imgs/3.png") no-repeat;}
// app.jsimport "style-loader/lib/addStyles";import "css-loader/lib/css-base";import "./css/base.css";

在處理圖片和進行 base64 編碼的時候,需要使用 url-loader 。

在壓縮圖片的時候,要使用 img-loader 插件,并且針對不同的圖片類型啟用不同的子插件。

postcss-loaderpostcss-sprites 則用來合成雪碧圖,減少網絡請求。

因此,在 npm 安裝完相關插件后, package.json 的內容如下所示:

{ "devDependencies": {  "css-loader": "^1.0.0",  "extract-text-webpack-plugin": "^4.0.0-beta.0",  "file-loader": "^1.1.11",  "imagemin": "^5.3.1",  "imagemin-pngquant": "^5.1.0",  "img-loader": "^3.0.0",  "postcss-loader": "^2.1.6",  "postcss-sprites": "^4.2.1",  "style-loader": "^0.21.0",  "url-loader": "^1.0.1",  "webpack": "^4.16.1" }}

同時,我們編寫如下 index.html (假設已經打包好了項目文件,現在直接引入):

<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>Document</title> <link rel="stylesheet" href="./dist/app.min.css" rel="external nofollow" ></head><body> <div id="app">  <div class="box">   <div class="ani1"></div>   <div class="ani2"></div>   <div class="ani3"></div>  </div> </div> <script src="./dist/app.bundle.js"></script></body></html>

2. 圖片處理 和 Base64 編碼

2.1 webpack 配置

為了方便樣式提取,還是利用 extract-text-webpack-plugin 來提取樣式文件。

同時,在 module.rules 選項中進行配置,以實現讓 loader 識別圖片后綴名,并且進行指定的處理操作。

代碼如下:

// webpack.config.jsconst path = require("path");const ExtractTextPlugin = require("extract-text-webpack-plugin");let extractTextPlugin = new ExtractTextPlugin({ filename: "[name].min.css", allChunks: false});module.exports = { entry: {  app: "./src/app.js" }, output: {  publicPath: __dirname + "/dist/",  path: path.resolve(__dirname, "dist"),  filename: "[name].bundle.js",  chunkFilename: "[name].chunk.js" }, module: {  rules: [   {    test: //.css$/,    use: ExtractTextPlugin.extract({     fallback: {      loader: "style-loader"     },     use: [      {       loader: "css-loader"      }     ]    })   },   {    test: //.(png|jpg|jpeg|gif)$/,    use: [     {      loader: "url-loader",      options: {       name: "[name]-[hash:5].min.[ext]",       limit: 20000, // size <= 20KB       publicPath: "static/",       outputPath: "static/"      }     }    ]   }  ] }, plugins: [extractTextPlugin]};

通過配置 url-loader 的 limit 選項,可以根據圖片大小來決定是否進行 base64 編碼。這次配置的是:小于 20kb 的圖片進行 base64 編碼。

2.2 打包結果

之前提到過,在項目中引入了 3 張圖片,其中 3.png 是小于 20kb 的圖片。在命令行中運行 webpack 進行打包,size 小于 20kb 的圖片被編碼,只打包了 2 個 size 大于 20kb 的圖片文件:

打開瀏覽器的控制臺,我們的圖片已經被成功編碼:

3. 圖片壓縮

3.1 壓縮配置

圖片壓縮需要使用 img-loader ,除此之外,針對不同的圖片類型,還要引用不同的插件。比如,我們項目中使用的是 png 圖片,因此,需要引入 imagemin-pngquant ,并且指定壓縮率。

我們只需要在上面的配置文件中將下方代碼:

// ...{ test: //.(png|jpg|jpeg|gif)$/, use: [  {   loader: "url-loader",   options: {    name: "[name]-[hash:5].min.[ext]",    limit: 20000, // size <= 20KB    publicPath: "static/",    outputPath: "static/"   }  } ]}// ...

替換為下方代碼即可,因為執行順序問題,我們將 url-loader 的 limit 設置成 1kb,來防止壓縮后的 png 圖片被 base64 編碼:

// ...{ test: //.(png|jpg|jpeg|gif)$/, use: [  {   loader: "url-loader",   options: {    name: "[name]-[hash:5].min.[ext]",    limit: 1000, // size <= 1KB    publicPath: "static/",    outputPath: "static/"   }  },  // img-loader for zip img  {   loader: "img-loader",   options: {    plugins: [     require("imagemin-pngquant")({      quality: "80" // the quality of zip     })    ]   }  } ]}// ...

3.2 打包結果

運行 webpack 打包,查看打包結果:

是的,如你所見,10.5kb 大小的迅雷圖標,被壓縮到了 1.8kb。圖片信息可以去 github 上查看,在文章開頭有提及 github 地址。

3.3 遺留問題

并沒有解決 jpg 格式圖片壓縮。根據 img-loader官方文檔 ,安裝了 imagemin-mozjpeg 插件。

但是這個插件的最新版本是 7.0.0 ,然而配置后,webpack 啟動會用報錯。

查看了 github 上的 issue,我將版本回退到 6.0.0 ??梢园惭b,也可以配置運行,正常打包。但是打包后的 jpg 圖片大小并沒有變化,也就是說,并沒有被壓縮?。?!

希望有大佬可以指點一下小生,萬分感謝

 4. 合成雪碧圖

4.1 webpack 配置

在之前的基礎上,配置還是很簡單的,loader 的引入和環境變量都在注釋里面了:

const path = require("path");const ExtractTextPlugin = require("extract-text-webpack-plugin");let extractTextPlugin = new ExtractTextPlugin({ filename: "[name].min.css", allChunks: false});/*********** sprites config ***************/let spritesConfig = { spritePath: "./dist/static"};/******************************************/module.exports = { entry: {  app: "./src/app.js" }, output: {  publicPath: __dirname + "/dist/",  path: path.resolve(__dirname, "dist"),  filename: "[name].bundle.js",  chunkFilename: "[name].chunk.js" }, module: {  rules: [   {    test: //.css$/,    use: ExtractTextPlugin.extract({     fallback: {      loader: "style-loader"     },     use: [      {       loader: "css-loader"      },      /*********** loader for sprites ***************/      {       loader: "postcss-loader",       options: {        ident: "postcss",        plugins: [require("postcss-sprites")(spritesConfig)]       }      }      /*********************************************/     ]    })   },   {    test: //.(png|jpg|jpeg|gif)$/,    use: [     {      loader: "url-loader",      options: {       name: "[name]-[hash:5].min.[ext]",       limit: 10000, // size <= 20KB       publicPath: "static/",       outputPath: "static/"      }     },     {      loader: "img-loader",      options: {       plugins: [        require("imagemin-pngquant")({         quality: "80"        })       ]      }     }    ]   }  ] }, plugins: [extractTextPlugin]};

4.2 效果展示

按照我們的配置,打包好的雪碧圖被放入了 /dist/static/ 目錄下,如下圖所示:

4.3 雪碧圖的實際應用

雪碧圖是為了減少網絡請求,所以被處理雪碧圖的圖片多為各式各樣的 logo 或者大小相等的小圖片。而對于大圖片,還是不推薦使用雪碧圖。

除此之外,雪碧圖要配合 css 代碼進行定制化使用。要通過 css 代碼在雪碧圖上精準定位需要的圖片(可以理解成從雪碧圖上裁取需要的圖片),更多可以百度或者 google。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美日韩精品二区| 欧美激情第一页xxx| 精品久久久久久中文字幕| 91在线高清免费观看| 国产91色在线免费| 中文字幕少妇一区二区三区| 亚洲精品xxxx| 午夜精品久久17c| 亚洲午夜精品久久久久久性色| 国产免费一区视频观看免费| 亚洲第一视频在线观看| 日本一区二区不卡| 日韩av在线看| 亚洲第一免费播放区| 中日韩美女免费视频网址在线观看| 国产视频亚洲精品| www.日韩视频| 亚洲男人天堂网| 国模精品一区二区三区色天香| 日韩欧美在线视频免费观看| 亚洲综合一区二区不卡| 久久天堂av综合合色| 91精品国产高清| 日韩av最新在线| 欧美限制级电影在线观看| 国产精品福利无圣光在线一区| 欧美在线视频网| 国产精品日日做人人爱| 欧美色播在线播放| 欧美人在线观看| 亚洲影院在线看| 亚洲人成伊人成综合网久久久| 欧美电影免费观看| 色偷偷88888欧美精品久久久| 影音先锋日韩有码| 欧美第一黄网免费网站| 国产不卡av在线免费观看| 97**国产露脸精品国产| 一区二区亚洲精品国产| 日韩日本欧美亚洲| 91久久嫩草影院一区二区| 日韩免费在线视频| 一个人看的www欧美| 成人免费网站在线观看| 亚洲国产成人精品久久| 成人黄色免费网站在线观看| 亚洲综合日韩在线| 欧美亚洲国产成人精品| 欧美夫妻性生活xx| y97精品国产97久久久久久| 亚洲人成电影网站色| 97久久久免费福利网址| 欧美日韩日本国产| 国内免费精品永久在线视频| 亚洲综合日韩中文字幕v在线| 久久久久女教师免费一区| 97国产精品视频| 亚洲天堂2020| 亚洲成人在线网| 亚洲国产女人aaa毛片在线| 亚洲性视频网址| 欧美日本亚洲视频| 最近2019年好看中文字幕视频| 亲爱的老师9免费观看全集电视剧| 欧美—级a级欧美特级ar全黄| 亚洲免费电影一区| 精品日本美女福利在线观看| 欧美极品欧美精品欧美视频| 成人在线一区二区| 国内精品久久影院| 91精品国产乱码久久久久久久久| 欧美精品xxx| 日韩av手机在线| 欧美日韩中文在线观看| 国产精品一区二区女厕厕| 欧美日韩在线视频一区| 成人网页在线免费观看| 国产精品爱啪在线线免费观看| 精品在线观看国产| 日本成人激情视频| 最近2019年好看中文字幕视频| 久久99精品久久久久久青青91| 搡老女人一区二区三区视频tv| 亚洲欧美中文另类| 高潮白浆女日韩av免费看| 国产精品国产亚洲伊人久久| 人人做人人澡人人爽欧美| 成人黄色在线播放| 欧美日韩中文字幕日韩欧美| 成人福利在线视频| 亚洲爱爱爱爱爱| 亚洲成人黄色在线观看| 国产精品麻豆va在线播放| 国产精品偷伦免费视频观看的| 九九九久久国产免费| 人人爽久久涩噜噜噜网站| www.欧美精品一二三区| xxxx性欧美| 亚洲精品国精品久久99热一| 日韩在线观看免费全| 国产日韩欧美日韩大片| 国产一区二区三区三区在线观看| 国产精品福利网| 国产精品欧美一区二区三区奶水| 国语自产偷拍精品视频偷| 欧美成人黑人xx视频免费观看| 色综合老司机第九色激情| 欧美成人高清视频| 欧美国产第二页| 精品久久久在线观看| 综合av色偷偷网| 国产精品美女视频网站| 日韩动漫免费观看电视剧高清| 日韩中文视频免费在线观看| 日韩在线观看成人| 中文字幕精品久久久久| 久久久久免费精品国产| 一区二区三区视频在线| 尤物精品国产第一福利三区| 亚洲欧洲黄色网| 国产精品久久久久久久久久小说| 日韩免费在线视频| 日韩av一区二区在线观看| 欧洲成人性视频| 国产精品偷伦视频免费观看国产| 日韩中文在线视频| 久久久久久国产精品久久| 欧美裸体xxxx极品少妇| 高清欧美电影在线| 久久精品美女视频网站| 欧美一区二区三区免费视| 欧美俄罗斯性视频| 国产成人avxxxxx在线看| 色狠狠久久aa北条麻妃| www.精品av.com| 日韩在线视频线视频免费网站| 国产网站欧美日韩免费精品在线观看| 亚洲美女免费精品视频在线观看| 超碰精品一区二区三区乱码| 日韩有码在线视频| 国产精品第100页| 国产欧美一区二区三区久久人妖| 国产精品扒开腿做爽爽爽男男| 久久久成人av| 亚洲天堂成人在线视频| 在线成人激情黄色| 国产精品普通话| 国产精品视频999| 福利精品视频在线| 日本欧美在线视频| 亚洲激情电影中文字幕| 欧美一区二区三区免费视| 日韩有码片在线观看| 国产精品精品久久久| 中文字幕欧美亚洲| 欧美日韩在线另类| 久久色精品视频| 91网站在线免费观看| 国产成人精品视频在线观看| 国产精品 欧美在线| 亚洲美女视频网站| 国产成人在线一区二区| 一色桃子一区二区| 国产日韩精品入口|