nginx實現本地圖片生成縮略圖


  nginx可以實現圖片的縮略圖效果,很多網站為了前端靜態資源相應的性能會給大圖自動生成一個小圖,比如我們經常會在網上看到bd_64x64.png這種格式,淘寶上的小圖經常會看到xxx.jpg_100x100xz.jpg這種格式,也是縮略圖的應用;接下來在nginx中實現縮略圖效果

  首先查看nginx在安裝時開啟了哪些模塊,使用 ./nginx -V 可以查看模塊開啟情況,更准確的說是將安裝nginx時編譯階段執行的 ./configure 命令的原樣輸出,如果編譯的時候添加了 --with-http_image_filter_module 那么表示nginx就能直接支持圖片縮略圖,另外編譯之前要提前安裝gd-devel這個庫,如果沒安裝可以使用rpm或者yum在線安裝的方式 yum -y install gd-devel 進行安裝,安裝之后再在原有參數上添加上面的參數編譯安裝nginx即可開啟模塊

  假設我們圖片的真實路徑是在本地/image_data/xxxx.jpg,下面有很多jpg格式的圖片,我們希望通過訪問/image_data/xxxx_100x100.jpg這樣的請求路徑可以生成寬為100,高也為100的小圖,並且請求的寬和高是可變的,那么這時候需要在nginx模塊中攔截該請求並返回轉換后的小圖,在對應的server {}段中進行配置,配置如下:

        location ~* /image_data/(.*)_(\d+)x(\d+)\.jpg$ {
            root /;
            set $s $1;
            set $w $2;
            set $h $3;
            image_filter resize $w $h;
            image_filter_buffer 10M;
            rewrite ^/image_data/(.*)$ /image_data/$s.jpg break;
        }

  過程就是獲取請求參數,然后進行相應縮小,最終重寫到對應的文件即可實現;另外上述image_filter_buffer設置圖片占用buffer的最大大小,默認為1M,當圖片大小大於該配置時,那么就會出現415的錯誤,所以要修改為合適的大小

  修改完上面配置之后,執行 ./nginx -s reload 即可生效,這時訪問圖片就可以實現小圖了

  需要注意一點,上面寬和高的設置並不是把圖片強制轉換成指定長和寬的大小,而是有其中一個變量最大等於設置的大小並且按比例縮小,比如設置為100x100,對於1000x600的圖片來說,縮小后是寬最大為100,高最大也是100,並且等比例縮小;假設高為100,那么寬為1000/6 = 166.67 > 100不符合要求,假設寬為100,那么高為600/10 = 60 < 100符合要求,所以最終縮小后的圖片應該是100x60的,並且保持比例不變形,這個地方要了解

  如果想產生長和寬都是100的正方形圖片怎么辦呢,現在就在 image_filter resize $w $h; 下面加一行: image_filter crop $w $h; 即可,這個表示對圖片裁剪並成比例擴大至相應的長度,即圖片內容可能會丟失,但是圖片比例仍然不變,所以只加resize還是兩個都加要根據具體需要來配置

  另外還可以對圖片進行旋轉,配置如下:

        location ~* /image_data/(.*)_(\d+)x(\d+)_(\d+)\.jpg$ {
            root /;
            set $s $1;
            set $w $2;
            set $h $3;
            set $r $4;
            image_filter resize $w $h;
            image_filter crop $w $h;
            image_filter rotate $r;
            image_filter_buffer 10M;
            rewrite ^/image_data/(.*)$ /image_data/$s.jpg break;
        }

 

  上面在圖片后面又加了一個參數表示旋轉度數,比如/image_data/xxx_100x100_90.jpg就可以把圖片逆時針旋轉90度,具體是用image_filter rotate來實現的,旋轉度數只能是90的整數倍,旋轉方向是逆時針,並且只有90,180,270是有效的,其余數字全部是顯示正的,如果不旋轉一般用0或者360就可以了

  以上就是nginx image_filter模塊,縮放,裁剪,旋轉圖片的簡單應用

 


免責聲明!

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



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