爲了手機端瀏覽到與手機分辨率相匹配的圖片,提升app訪問速度以及減小用戶的手機流量,須要將圖片生成縮略圖,這邊共有如下解決方案。
A. 發佈新聞生成多重縮略圖 – 沒法匹配到各類尺寸圖片
B. 當相應縮略圖不存在,則使用php或者java等程序生成相應縮略圖 – 須要程序員協助
C. 使用nginx自帶模塊生成縮略圖 – 運維便可完成
D. 使用nginx+lua生成縮略圖php
通過多方的考慮,決定使用方案C,使用nginx自帶模塊生成縮略圖,模塊:--with-http_image_filter_module.
以下是個人安裝參數:html
./configure --prefix=/usr/local/nginx-1.4.1 --with-http_stub_status_module \ --with-http_realip_module --with-http_image_filter_module --with-debug
修改nginx.conf配置文件,或者放到你相應的server塊中.前端
location ~* /(\d+)\.(jpg)$ { set $h $arg_h; # 獲取參數h的值 set $w $arg_w; # 獲取參數w的值 #image_filter crop $h $w; image_filter resize $h $w; # 根據給定的長寬生成縮略圖 } location ~* /(\d+)_(\d+)x(\d+)\.(jpg)$ { if ( -e $document_root/$1.$4 ) { # 判斷原圖是否存在 rewrite /(\d+)_(\d+)x(\d+)\.(jpg)$ /$1.$4?h=$2&w=$3 last; } return 404; }
例如圖片:
http://test.ttlsa.com/123_100x10.jpg
一、 首先判斷是否存在原圖123.jpg,不存在直接返回404(若是原圖都不存在,還生成縮略圖幹啥,對吧)
二、 跳轉到http://tset.ttlsa.com/123.jpg?h=100&w=10,將參數高h和寬10帶到url中。
三、 Image_filter resize指令根據h和w參數生成相應縮略圖。
備註:長寬取小,例如原圖是100*10,你傳入的是10*2,那麼他會給你生成10*1的圖片.java
生成縮略圖只是image_filter功能中的一個,它一共支持4種參數:
test:返回是否真的是圖片
size:返回圖片長短尺寸,返回json格式數據
corp:截取圖片的一部分,從左上角開始截取,尺寸寫小了,圖片會被剪切
resize:縮放圖片,等比例縮放nginx
nginx生成縮略圖優缺點
優勢:
一、 根據傳入參數便可生成各類比例圖片
二、 不佔用任何硬盤空間程序員
缺點:
一、消耗CPU,訪問量大將會給服務器帶來極大的負擔.json
幾點建議:
一、 生成縮略是個消耗cpu的操做,若是訪問量比較大的站點,最好考慮使用程序生成縮略圖到硬盤上,或者在前端加上cache或者使用CDN。服務器
轉載請註明出處:http://www.ttlsa.com/html/1612.htmlapp