1. 程式人生 > >使用grunt來無失真壓縮圖片

使用grunt來無失真壓縮圖片

作為一個前端工程師,或者web開發工程師,圖片是你無法忽視的一個東西,沒有一本優化方面的書不會提及圖片的優化。

pagespeed裡面,首當其衝的也是提示你的圖片需要優化。

之前有做過很多嘗試,處理png圖片等,可以檢視以前的部落格:優化png圖片的歷程

但是之前的方法有兩個問題:

1、主要是優化PNG圖片

2、效率低下,不適合批量操作

為了解決上訴問題,現在使用一個新的方法去批量壓縮圖片。

這個方法就是,噔噔噔噔,Grunt-contrib-imagemin

操作步驟如下:

1、首先你得有nodejs環境,如果你沒有,請參考:https://nodejs.org/

2、然後開啟node.js command prompt

3、通過npm安裝grunt,如果你沒有grunt的話。要安裝,請參考:http://www.gruntjs.net/

4、然後新建一個資料夾,我的個人看法是,你所新建的這個資料夾將作為你壓縮圖片的一個寄存地,也就是一個快取區。當你要壓縮某些圖片的時候,可以把圖片複製過來,然後執行一下壓縮命令即可。而不用每次都在你的專案目錄中安裝imagemin


安裝Grunt-contrib-imagemin,需要系統中已經安裝grunt的,所以你首先要參考第3條。


輸入了安裝imagemin的命令後,會從遠端伺服器中下載這個包到你的新建的目錄中了。

5、新建Gruntfile.js檔案,開啟你剛才新建的目錄,我這裡是gruntImgmin

然後在這個根目錄中,新建上述js檔案,然後新建grunt任務:

module.exports = function (grunt) {
    'use strict';
    grunt.initConfig({
        imagemin: {
            /* 壓縮圖片大小 */
            dist: {
                options: {
                    optimizationLevel: 3 //定義 PNG 圖片優化水平
                },
                files: [
                       {
                    expand: true,
                    cwd: 'images/',
                    src: ['**/*.{png,jpg,jpeg}'], // 優化 img 目錄下所有 png/jpg/jpeg 圖片
                    dest: 'images/' // 優化後的圖片儲存位置,覆蓋舊圖片,並且不作提示
                    }
                    ]
                }
            },
            });
    grunt.loadNpmTasks('grunt-contrib-imagemin');
    grunt.registerTask('img', ['imagemin']);
};

上面的任務中,我是把原圖片資料夾和目標資料夾寫成了同一個,也就是要覆蓋原圖片,如果你不想這樣,可以自己更改路徑就可以了。

6、把圖片放在相應的資料夾之後,在nodejs的命令列中輸入命令:



7、檔案對比

壓縮前總檔案大小為535k,壓縮後為508k,減少了47k。

因為壓縮的圖片大部分為jpg,所以壓縮率可能不是特別高,當png比較多,或者整體檔案比較多的時候,這種差異會更大。減少了47k已經減少了很多,為你的網頁的效能呢個又優化了一步。

參考:

http://www.zfanw.com/blog/gruntjs-optimize-image-size-loseless.html

http://www.gruntjs.net/

https://nodejs.org/