搭建一個最簡單的圖片處理服務(wù)器

從七牛上線的時候就開始使用七牛云存儲的服務(wù),對于其中的圖片處理一直比較好奇皆看,只需要簡單的在圖片的訪問鏈接上加上參數(shù)龙誊,就可以按照定義的功能,得到裁剪或者處理好的圖片春哨。

對于實現(xiàn)的機制荆隘,也不能說是完全沒有概念,只是從來沒有認(rèn)真的思考或者嘗試著動手實現(xiàn)一下赴背。所以一直只是一個當(dāng)作縮放工具來用的普通用戶椰拒;最近正好看到一個使用nginx和libgb實現(xiàn)的圖片處理服務(wù),感覺非常簡單就可以搭建凰荚,果斷嘗試了之后燃观,確實get了一項很實用的技能或者說是工具。

運行原理和機制

實現(xiàn)一個圖片處理服務(wù)器本身如果不去自己實現(xiàn)web服務(wù)器和圖片處理的核心程序的話便瑟,只是以使用功能為目的的話缆毁,圖片處理功能更多在于技術(shù)選型和運維。定義好資源訪問的路由規(guī)則和調(diào)用圖片處理的語法之后到涂,簡單的運行原理應(yīng)該包含以下步驟:

  1. web服務(wù)器將資源請求轉(zhuǎn)發(fā)給有處理能力并且已經(jīng)注冊的應(yīng)用服務(wù)器或者調(diào)用本地程序脊框;
  2. 應(yīng)用服務(wù)器(例如PHP)根據(jù)路由規(guī)則,和應(yīng)用程序本身的設(shè)計养盗,定位到路由對應(yīng)的圖片二進(jìn)制文件缚陷;
    3 根據(jù)路由,或者其他http header信息往核,解析要對圖片進(jìn)行的解析操作箫爷;
  3. 應(yīng)用服務(wù)器自己實現(xiàn),或者調(diào)用其他的圖片處理庫,或者調(diào)用其他程序(例如ImageMagick)虎锚,對二進(jìn)制文件進(jìn)行處理硫痰,獲得處理好的圖片;
  4. 將圖片按照http協(xié)議窜护,返回請求的客戶端效斑。

自己設(shè)計實現(xiàn)對ImageMagick、GD的封裝柱徙,或者是嘗試自己編寫處理圖片的程序缓屠,都是很有趣的事情,應(yīng)該找機會親自動手實踐护侮。

解決方案

最近偶然看到的一個方案是敌完,使用nginx提供的nginx-module-image-filter,nginx的擴展模塊羊初,就可以提供最基礎(chǔ)的圖片裁剪服務(wù)器滨溉,簡單了解之后,馬上著手使用docker開始搭建nginx圖片處理服務(wù)器长赞。

安裝nginx晦攒,并開啟image-filter模塊

本例中使用centos安裝nginx,要使用image-filter模塊得哆,首先需要安裝gd脯颜,實際上gd是真正處理圖片等程序,使用yum安裝yum install -y gd-devel贩据。

參看nginx的官方文檔之后伐脖,知道image-filter這個module默認(rèn)不會自己編譯到安裝包中的,所以需要自己手動安裝乐设,下載nginx源碼,解壓縮之后進(jìn)入目錄绎巨,執(zhí)行./configure --prefix=/usr/local/nginx --with-http_image_filter_module近尚,然后make編譯。

編譯成功之后curl http://localhost:8080/场勤,檢查安裝是否成功戈锻。

下面是完整的Dockerfile文件,為了提高下載速度和媳,使用的是時速云提供的centos鏡像格遭。

FROM index.tenxcloud.com/tenxcloud/docker-centos
#FROM centos

RUN yum install -y gd-devel wget \
    && yum -y install gcc gcc-c++ kernel-devel make \
    && wget http://nginx.org/download/nginx-1.11.7.tar.gz \
    && tar -xzvf nginx-1.11.7.tar.gz \
    && wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.39.tar.gz \ 
    && tar -xzvf pcre-8.39.tar.gz \
    && cd nginx-1.11.7 \
    && ./configure --prefix=/usr/local/nginx --with-http_image_filter_module --with-pcre=../pcre-8.39 \
    && make \
    && make install
    
ENV PATH /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/nginx/sbin

WORKDIR /var/www

EXPOSE 80 443

CMD ["nginx", "-g", "daemon off;"]

nginx配置,啟用image filter

安裝完nginx之后留瞳,直接設(shè)置image filter的規(guī)則就可以使用圖片處理功能拒迅。

location /img/ {
    proxy_pass   http://backend;
    image_filter resize 150 100;
    image_filter rotate 90;
    error_page   415 = /empty;
}

location = /empty {
    empty_gif;
}

通過設(shè)置proxy_pass,我們要對某個網(wǎng)站上的圖片進(jìn)行裁剪,只需要將代理設(shè)置到指向該網(wǎng)站就可以了璧微。

image_filter resize 150 100; 就是重新調(diào)整圖片的尺寸作箍。
image_filter off; 配置可以關(guān)閉image filter。

通過結(jié)合nginx的解析規(guī)則前硫,我們就可以根據(jù)url鏈接的參數(shù)胞得,動態(tài)的制定要縮放圖片的大小。

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

location ~* /static/.*\.(jpg|gif|png)$ {  
    proxy_pass              http://www.liuwill.com;
    image_filter resize $width $height;  
}

配置完成之后屹电,調(diào)用nginx -s reload加載新的配置文件阶剑,然后輸入鏈接http://localhost/static/image_url.png/w/100/h/100,查看效果危号。

詳細(xì)說明可以參看nginx提供的image filter官方文檔牧愁。

github地址:https://github.com/liuwill-projects/docker-nginx-img

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市葱色,隨后出現(xiàn)的幾起案子递宅,更是在濱河造成了極大的恐慌,老刑警劉巖苍狰,帶你破解...
    沈念sama閱讀 217,542評論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件办龄,死亡現(xiàn)場離奇詭異,居然都是意外死亡淋昭,警方通過查閱死者的電腦和手機俐填,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,822評論 3 394
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來翔忽,“玉大人英融,你說我怎么就攤上這事⌒剑” “怎么了驶悟?”我有些...
    開封第一講書人閱讀 163,912評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長材失。 經(jīng)常有香客問我痕鳍,道長,這世上最難降的妖魔是什么龙巨? 我笑而不...
    開封第一講書人閱讀 58,449評論 1 293
  • 正文 為了忘掉前任笼呆,我火速辦了婚禮,結(jié)果婚禮上旨别,老公的妹妹穿的比我還像新娘诗赌。我一直安慰自己,他們只是感情好秸弛,可當(dāng)我...
    茶點故事閱讀 67,500評論 6 392
  • 文/花漫 我一把揭開白布铭若。 她就那樣靜靜地躺著洪碳,像睡著了一般。 火紅的嫁衣襯著肌膚如雪奥喻。 梳的紋絲不亂的頭發(fā)上偶宫,一...
    開封第一講書人閱讀 51,370評論 1 302
  • 那天,我揣著相機與錄音环鲤,去河邊找鬼纯趋。 笑死,一個胖子當(dāng)著我的面吹牛冷离,可吹牛的內(nèi)容都是我干的吵冒。 我是一名探鬼主播,決...
    沈念sama閱讀 40,193評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼西剥,長吁一口氣:“原來是場噩夢啊……” “哼痹栖!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起瞭空,我...
    開封第一講書人閱讀 39,074評論 0 276
  • 序言:老撾萬榮一對情侶失蹤揪阿,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后咆畏,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體南捂,經(jīng)...
    沈念sama閱讀 45,505評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,722評論 3 335
  • 正文 我和宋清朗相戀三年旧找,在試婚紗的時候發(fā)現(xiàn)自己被綠了溺健。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,841評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡钮蛛,死狀恐怖鞭缭,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情魏颓,我是刑警寧澤岭辣,帶...
    沈念sama閱讀 35,569評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站甸饱,受9級特大地震影響易结,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜柜候,卻給世界環(huán)境...
    茶點故事閱讀 41,168評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望躏精。 院中可真熱鬧渣刷,春花似錦、人聲如沸矗烛。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,783評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至碌嘀,卻和暖如春涣旨,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背股冗。 一陣腳步聲響...
    開封第一講書人閱讀 32,918評論 1 269
  • 我被黑心中介騙來泰國打工霹陡, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人止状。 一個月前我還...
    沈念sama閱讀 47,962評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親厘托。 傳聞我的和親對象是個殘疾皇子近范,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,781評論 2 354

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)集峦,斷路器伏社,智...
    卡卡羅2017閱讀 134,656評論 18 139
  • 第一章 Nginx簡介 Nginx是什么 沒有聽過Nginx?那么一定聽過它的“同行”Apache吧塔淤!Ngi...
    JokerW閱讀 32,672評論 24 1,002
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,116評論 25 707
  • 曾經(jīng)的自己 一有空就主動給你發(fā)信息 會置...
    白白byj閱讀 163評論 0 0
  • Not only coming to terms but making proposition occurs...
    Blablablaaaaaaa閱讀 926評論 0 0