前端圖片壓縮調研


概述

最近做項目思考了一下前端圖片壓縮問題,有一些小的心得,記錄下來,供以后開發時參考,相信對其他人也有用。下面按優先級列出了前端圖片壓縮的解決方案

webpack

現在前端項目都是利用webpack打包,所以我調研了一下在webpack里面壓縮圖片的解決方案,主要使用基於imagemin插件的imagemin-webpack-plugin插件

首先安裝imagemin-webpack-plugin插件:

npm install imagemin-webpack-plugin

然后在webpack配置中添加如下配置,就可以在項目打包的時候自動壓縮圖片了。

var ImageminPlugin = require('imagemin-webpack-plugin').default

module.exports = {
  plugins: [
    // Make sure that the plugin is after any plugins that add images
    new ImageminPlugin({
      test: /\.(jpe?g|png|gif|svg)$/i,
      disable: process.env.NODE_ENV !== 'production', // Disable during development
      pngquant: {
        quality: '95-100'
      }
    })
  ]
}

如果使用webpack-chain的話,webpack的配置如下:

const ImageminPlugin = require('imagemin-webpack-plugin').default;

module.exports = {
  chainWebpack: config => {
    config
      .plugin('ImageminPlugin')
      .use(ImageminPlugin, [{
        test: /\.(jpe?g|png|gif|svg)$/i,
        disable: process.env.NODE_ENV !== 'production', // Disable during development
        pngquant: {
          quality: '95-100'
        }
      }]);
  },
};

這個插件靈活性挺高的,可以通過調整quality來調整生成的圖片的品質。

這里說一下ImageminPlugin的配置:

  1. pngquant設置壓縮圖片的品質,建議設置為95-100。
  2. minFileSize設置多大以上的圖片才壓縮,單位是比特,建議設置為5120,即5k以上的圖片才壓縮。
  3. test設置那里的圖片才壓縮,這里的路徑是打包后的路徑,如果打包后圖片存放的文件夾是img,那么這里的值是:/img\/.*\.(jpe?g|png|gif|svg)$/i

wordpress

我們官網是用wordpress制作的。我找了一下wordpress上面的圖片壓縮插件,發現都不能自己調整最終圖片的品質。比較主流的有以下幾個:

1.Compress JPEG & PNG images。TinyPNG官方發布的wordpress壓縮圖片插件,支持在后台一鍵壓縮所有wordpress上的圖片,但是每個api key每月限制最多只能壓縮500張,否則就需要付費購買次數了(但是可以申請多個api key來解決這個問題)。
2.Smush。wordpress上活躍安裝數超過1百萬次。免費,后台界面非常人性化。
3.ShortPixel Image Optimizer。支持lossy,glossy和lossless三種圖片壓縮模式。

我個人建議使用Compress JPEG & PNG images,畢竟TinyPNG的名聲在那里,壓縮的圖片也不會太差。

另外還可以修改上傳圖片的大小限制,在functions.php中添加如下代碼,這樣上傳限制就是64M:

@ini_set( 'upload_max_size' , '64M' );
@ini_set( 'post_max_size', '64M');
@ini_set( 'max_execution_time', '300' );

另一種方法是在根目錄新建php.ini文件,里面加入如下代碼:

upload_max_filesize = 64M
post_max_size = 64M
max_execution_time = 300

壓圖工具

如果對wordpress的插件沒有自己設置最終圖片的品質的功能不滿意,那么可以在本地安裝客戶端來進行圖片壓縮。這里推薦使用智圖。它是 騰訊ISUX 設計團隊出品的一款免費壓縮工具,有客戶端,可以離線使用,支持自定義壓縮品質,還可以自動導出為WebP格式。

壓圖網站

最后可以在一些圖片壓縮網站上進行在線壓縮。比如tinypng圖好快智圖jpeg ioOptimizilla。這里我推薦tinypng。

不過這種方式強烈不推薦,如今是前端自動化的時代,這種手工壓縮的方式已經落伍了。

總結

項目中的圖片文件可以分為以下四種:

  1. ps或figma等專業工具導出的jpg圖片。導出的時候可以定一個導出圖片的品質,然后ui設計師按照這個品質來導出圖片。可以不壓縮。

  2. ps或figma等專業工具導出的png圖片。這種圖片在導出的時候不能設置品質,所以需要壓縮。

  3. 相機或者手機里面拍照的圖片。這種圖片需要壓縮。

  4. svg。使用svgo進行壓縮。已經在項目中的ym-svg-sprite插件中支持。

總的來說,在項目中使用imagemin插件進行圖片壓縮;在wordpress里面使用插件進行圖片壓縮,或者安裝本地客戶端來壓縮wordpress里面的圖片。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM