###### tags: `imagemin` `WebP` # Imagemin ## MozJPEG (Compress JPG) [GitHub ](https://github.com/imagemin/imagemin-mozjpeg) #### Install ```txt npm install imagemin-mozjpeg ``` #### How to used ```txt // 套件定義 // 在 package.json 內引用的套件 const gulp = require('gulp'); const imagemin = require('imagemin'); const imageminMozjpeg = require('imagemin-mozjpeg'); // 建構工作 const mozjpeg = async () => { await imagemin(['src/img/*.jpg']/*輸入路徑與檔案格式*/, 'build/img'/*輸出目錄*/, { use: [ imageminMozjpeg({ quality: 50 }) ] }); console.log('Images optimized'); }; // 輸出工作 exports.default = gulp.series(mozjpeg); ``` #### Params Options | Params | Type | Default | Description | | :--- | :---: | :--- | :--- | :--- | | quality | number | | 0 為最差,100 為最好,建議值是高於 70,請依照需求設定。 [壓圖前後比較](https://docs.google.com/presentation/d/1bvGigt5kWGPyArQ6GAqRwYVrIAjedoGG-ghmSWGHH0o/edit#slide=id.g5b1585702d_0_120) ## imagemin-pngquant (Compress PNG) [GitHub ](https://github.com/imagemin/imagemin-pngquant) #### Install ```txt npm install imagemin-pngquant ``` #### How to used ``` const imagemin = require('imagemin'); const imageminPngquant = require('imagemin-pngquant'); (async () => { const files = await imagemin(['images/*.png'], 'build/images', { plugins: [ imageminPngquant({ quality: [0.6, 0.8] }) ] }); })(); ``` ### Params Options | Params | Type | Description | | :--- | :---: | :--- | :--- | | quality | Array<min: number, max: number> | pngquant使用達到或超過最高質量所需的最少量的顏色。如果轉換結果的質量低於最低質量,圖像將不會被保存。最小值和最大值是範圍0(最差)到1(完美) # WebP - Google 推出的圖檔格式,視覺質量和 JPG & PNG相當,但文件更小。 - 目前不能完全取代 JPG & PNG,[因為瀏覽器對WebP支持不普遍](https://caniuse.com/#feat=webp)。 ## imagemin-webp (將JPEG和PNG轉成WebP) [GitHub ](https://www.npmjs.com/package/imagemin-webp) #### Install ```txt npm install imagemin-webp ``` #### How to used ``` const imageminWebp = require('imagemin-webp'); const convertPNGToWebp = () => imagemin([PNGImages], output, { use: [ imageminWebp({ quality: 85, }), ] }); const convertJPGToWebp = () => imagemin([JPGImages], output, { use: [ imageminWebp({ quality: 75, }), ] }); optimiseJPEGImages() .then(() => optimisePNGImages()) .then(() => convertPNGToWebp()) .then(() => convertJPGToWebp()) .catch(error => console.log(error)); })(); ``` ## 在HTML中使用WebP 1. [使用HTML5 的<picture>](http://blog.shihshih.com/how-to-use-html5-picture-element-to-achieve-responsive-image/)是廣泛兼容性的最佳選擇(當瀏覽器不支援WebP) 2. 指定一個 img元素作為<picture>標籤中的預設圖片、當瀏覽器==不支援WebP、<picture>標籤、或是沒有符合的<source>時,則直接顯示img標籤(PNG或JPEG圖像)==。 ```javascript= <!-- before --> <img src="images/active-2.png" /> <!-- after --> <picture> <source type="image/webp" srcset="build/active-1.webp" /> <img src="images/active-2.png" /> </picture> ``` ![](https://i.imgur.com/I7XPdUq.png) ### 參考資料 1. [How Image Optimisation Decreased my Website's Page Weight by 62%](https://freshman.tech/image-optimisation/#compress-jpegs-with-mozjpeg) 2. [Gulp 運行 imagemin-mozjpeg,mozjpeg 批次圖片壓縮](https://mnya.tw/cc/word/1347.html) 3. [前端图片压缩调研](https://github.com/sishenhei7/react-blog/issues/24) 4. [Using WebP images](https://css-tricks.com/using-webp-images/) 5. [使用HTML5 <picture>實現響應式圖片](http://blog.shihshih.com/how-to-use-html5-picture-element-to-achieve-responsive-image/)