<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Nginx系列:圖片過(guò)濾處理

          共 5107字,需瀏覽 11分鐘

           ·

          2020-09-01 13:55

          點(diǎn)擊上方「藍(lán)字」關(guān)注我們


          ? ? ? http_image_filter_module是Nginx提供的集成圖片處理模塊,支持nginx-0.7.54以后的版本,在網(wǎng)站訪問(wèn)量不是很高;磁盤(pán)有限不想生成多余的圖片文件的前提下,就可以用它實(shí)時(shí)縮放圖片,旋轉(zhuǎn)圖片,驗(yàn)證圖片有效性以及獲取圖片寬高以及圖片類(lèi)型信息,由于是實(shí)時(shí)計(jì)算的結(jié)果,所以網(wǎng)站訪問(wèn)量大的話,不建議使用。

          ? ? ? 安裝還是很簡(jiǎn)單的,默認(rèn)http_image_filter_module模塊是不會(huì)編譯進(jìn)nginx的,所以要在configure時(shí)候指定編譯http_image_filter_module模塊。另外http_image_filter_module模塊需要依賴(lài)gd-devel的支持,可以使用yum install gd-devel先安裝,如果未安裝會(huì)報(bào)“/configure: error: the HTTP image filter module requires the GD library.”錯(cuò)誤。

          Nginx圖片處理的優(yōu)缺點(diǎn)

          • 優(yōu)點(diǎn)

          (1)操作簡(jiǎn)單。通過(guò)簡(jiǎn)單配置,省去了后端裁剪程序的復(fù)雜性;

          (2)實(shí)時(shí)裁剪。可以實(shí)時(shí)訪問(wèn)在線裁剪圖片;

          (3)靈活性強(qiáng)。后端程序裁剪圖片時(shí)需要知道裁剪圖片的尺寸和質(zhì)量,使用nginx裁剪可以實(shí)時(shí)裁剪任意尺寸的圖片;

          (4)不占用硬盤(pán)空間;

          • 缺點(diǎn)

          (1)消耗CPU和內(nèi)存,訪問(wèn)量大的時(shí)候就會(huì)給服務(wù)器帶來(lái)很大的負(fù)擔(dān)。(可以通過(guò)使用Nginx緩存和緩存服務(wù)器來(lái)解決);

          (2)功能不是很強(qiáng)大,支持的處理圖片類(lèi)型只包括JPEG、GIF、PNG or WebP;


          0x01:安裝http_image_filter_module

          • 先安裝gd-devel依賴(lài)庫(kù)

          yum?install?gd-devel

          • Nginx添加http_image_filter_module模塊

          先查看舊版本Nginx的configure參數(shù)

          ?/usr/local/nginx/sbin/nginx?-V


          configure時(shí)添加http_image_filter_module模塊

          /configure?--prefix=/usr/local/nginx?--user=nginx?\
          --group=nginx?--with-http_secure_link_module?\
          --with-http_stub_status_module??\
          --with-stream_ssl_preread_module??\
          --with-http_ssl_module??\
          --with-http_image_filter_module?

          編譯安裝nginx

          make?
          cp?./objs/nginx?/usr/local/nginx/sbin/


          0x02:語(yǔ)法說(shuō)明

          • image_filter

          語(yǔ)法:????image_filter?off;
          image_filter?test;
          image_filter?size;
          image_filter?rotate?90?|?180?|?270;
          image_filter?resize?width?height;
          image_filter?crop?width?height;

          默認(rèn)值:????—

          上下文:????location

          設(shè)置圖像變換的操作:

          off? : 在所在location關(guān)閉模塊處理。

          test :確保應(yīng)答是JPEG,GIF或PNG格式的圖像。否則錯(cuò)誤 415 (Unsupported Media Type) 將被返回。

          size: 以json格式返回圖像信息。例如:

          {?"img"?:?{?"width":?100,?"height":?100,?"type":?"gif"?}?}

          如果有錯(cuò)誤發(fā)生,將會(huì)返回如下:

          {}

          rotate 90|180|270 : 將圖像逆時(shí)針旋轉(zhuǎn)指定角度。參數(shù)的值可以包含變量。可以單獨(dú)使用,或與 resize 和 crop 變換同時(shí)使用.

          resize width height:?按比例縮小圖像至指定大小。如果想只指定其中一維,另一維可以指定為:“-”。如果有錯(cuò)誤發(fā)生,服務(wù)器會(huì)返回 415 (Unsupported Media Type). 參數(shù)的值可以包含變量。當(dāng)與 rotate 參數(shù)同時(shí)使用時(shí), 旋轉(zhuǎn)發(fā)生在縮放 之后。

          crop width height : 按比例以圖像的最短邊為準(zhǔn)對(duì)圖像大小進(jìn)行縮小,然后裁剪另一邊多出來(lái)的部分。如果想只指定其中一維,另一維可以指定為:“-”。如果有錯(cuò)誤發(fā)生,服務(wù)器會(huì)返回 415 (Unsupported Media Type). 參數(shù)的值可以包含變量。當(dāng)與 rotate 參數(shù)同時(shí)使用時(shí), 旋轉(zhuǎn)發(fā)生在裁剪 之前。

          • image_filter_buffer?

          語(yǔ)法:????image_filter_buffer?size;

          默認(rèn)值:????image_filter_buffer?1M;

          上下文:????http,?server,?location


          設(shè)置用來(lái)讀圖像的緩沖區(qū)的最大值。若圖像超過(guò)這個(gè)大小,服務(wù)器會(huì)返回 415 (Unsupported Media Type).

          • image_filter_jpeg_quality?

          語(yǔ)法:?image_filter_jpeg_quality?quality;

          默認(rèn)值:????image_filter_jpeg_quality?75;

          上下文:????http,?server,?location

          設(shè)置變換后的JPEG圖像的 質(zhì)量 。可配置值:1 ~ 100 。更小的值意味著更差的圖像質(zhì)量以及更少需要傳輸?shù)臄?shù)據(jù)。推薦的最大值是95. 參數(shù)的值可以包含變量。

          • image_filter_sharpen

          語(yǔ)法:????image_filter_sharpen?percent;

          默認(rèn)值:????image_filter_sharpen?0;

          上下文:????http,?server,?location

          增加最終圖像的銳度。銳度百分比可以超過(guò)100. 0為關(guān)閉銳化。參數(shù)的值可以包含變量。

          • image_filter_transparency?

          語(yǔ)法:????image_filter_transparency?on|off;

          默認(rèn)值:????image_filter_transparency?on;

          上下文:????http,?server,?location

          定義當(dāng)對(duì)PNG,或者GIF圖像進(jìn)行顏色變換時(shí)是否需要保留透明度。損失透明度有可能可以獲得更高的圖像質(zhì)量。PNG圖像中的alpha通道的透明度默認(rèn)會(huì)一直被保留。

          image_filter?off;??
          #關(guān)閉模塊??

          image_filter?test;??
          #確保圖片是jpeg?gif?png否則返415錯(cuò)誤??

          image_filter?size;??
          #輸出有關(guān)圖像的json格式:如下顯示{?"img"?:?{?"width": 100, "height": 100, "type":?"gif"?}?}?出錯(cuò)顯示:{}??

          image_filter?rotate?90|180|270;??
          #旋轉(zhuǎn)指定度數(shù)的圖像,參數(shù)可以包括變量,單獨(dú)或一起與resize crop一起使用。??

          image_filter?resize?width?height;??
          #按比例減少圖像到指定大小,如果減少一個(gè)可以另一個(gè)用"-"來(lái)表示,出錯(cuò)415,參數(shù)值可包含變量,可以與rotate一起使用,則兩個(gè)一起生效。??

          image_filter?crop?width?height;??
          #按比例減少圖像比較大的側(cè)面積和另一側(cè)多余的裁剪邊緣,其它和rotate一樣。沒(méi)太理解??

          image_filter_buffer?10M;??
          #設(shè)置讀取圖像緩沖的最大大小,超過(guò)則415錯(cuò)誤。??

          image_filter_interlace?on;??
          #如果啟用,最終的圖像將被交錯(cuò)。對(duì)于JPEG,最終的圖像將在“漸進(jìn)式JPEG”格式。??

          image_filter_jpeg_quality?95;??
          #設(shè)置變換的JPEG圖像的期望質(zhì)量。可接受的值是從1到100的范圍內(nèi)。較小的值通常意味著既降低圖像質(zhì)量,減少傳輸數(shù)據(jù),推薦的最大值為95。參數(shù)值可以包含變量。??

          image_filter_sharpen?100;??
          #增加了最終圖像的清晰度。銳度百分比可以超過(guò)100。零值將禁用銳化。參數(shù)值可以包含變量。??

          image_filter_transparency?on;??
          #定義是否應(yīng)該透明轉(zhuǎn)換的GIF圖像或PNG圖像與調(diào)色板中指定的顏色時(shí),可以保留。透明度的損失將導(dǎo)致更好的圖像質(zhì)量。在PNG的Alpha通道總是保留透明度。


          0x03:實(shí)戰(zhàn)http_image_filter_module

          在Nginx配置文件nginx.conf添加如下配置

          ??location?~*?\.(jpg|gif|png)$?{
          ????????????image_filter?test;
          ????????????root?html;
          ????????????#?圖片默認(rèn)寬度
          ????????????set?$width?-;??
          ????????????#?圖片默認(rèn)高度
          ????????????set?$height?-;??
          ????????????if?($arg_width?!=?"")?{
          ????????????????set?$width?$arg_width;
          ????????????}
          ????????????if?($arg_height?!=?"")?{
          ???????????????set?$height?$arg_height;
          ????????????}
          ????????????#?設(shè)置圖片寬高
          ????????????image_filter?resize?$width?$height;??
          ????????????#?設(shè)置nginx讀取圖片最大buffer
          ????????????image_filter_buffer?10M;??
          ????????????#?是否開(kāi)啟圖片隔行掃描????????????
          ????????????image_filter_interlace?on;???
          ????????????error_page?404?=?400.html;
          ???????}

          配置完成后,在html目錄新建image目錄

          訪問(wèn)可以查看結(jié)果

          http://127.0.0.1/image/3.jpg?height=100
          http://127.0.0.1/image/3.jpg?width=130
          http://127.0.0.1/image/3.jpg?width=100&height=200


          0x04:附錄

          幾個(gè)可能有用的規(guī)則

          • 匹配全站所有的結(jié)尾圖片?

          ?location?~*?\.(jpg|gif|png)$?{??
          ????????????image_filter?resize?500?500;??
          ????????}??


          • 匹配某個(gè)目錄所有圖片

          ????????location?~*?/image/.*\.(jpg|gif|png)$?{??
          ????????????image_filter?resize?500?500;??
          ????????}???
          • 使用url指定大小

          ???location?~*?(.*\.(jpg|gif|png))!(.*)!(.*)$?{??
          ????????????set?$width??????$3;??
          ????????????set?$height?????$4;??
          ????????????rewrite?"(.*\.(jpg|gif|png))(.*)$"?$1;??
          ????????}??

          ????????location?~*?/image/.*\.(jpg|gif|png)$?{??
          ????????????image_filter?resize?$width?$height;??
          ????????}???

          http://127.0.0.1/image/girl.jpg!300!200??

          自動(dòng)將原圖縮放為300*200的尺寸

          掃碼二維碼

          獲取更多精彩

          Java樂(lè)園

          有用!分享+在看?
          瀏覽 70
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  www.av91 | 欧美熟女一区二区 | 亚洲AV无码一区二区三区桃色 | 三级片视频网站 | 国产精品久久在线视频 |