1. 程式人生 > >nginx+lua_nginx+GraphicsMagick生成實時縮圖

nginx+lua_nginx+GraphicsMagick生成實時縮圖

暫做筆記,帶後續驗證通過後,再補充 1、2、3 步。

一、安裝 lua

   首先確認是否安裝 readline

  yum -y install readline-devel ncurses-devel

 進入頁面:http://www.lua.org/download.html

wget http://www.lua.org/ftp/lua-5.3.1.tar.gz  

tar zxvf lua-5.3.1.tar.gz 

#進入解壓目錄
make linux && make install
wget http://luajit.org/download/LuaJIT-2.0.4.tar.gz
tar zxvf LuaJIT-2.0.4.tar.gz cd LuaJIT-2.0.4 make && make install
ln -s /usr/local/lib/libluajit-5.1.so.2 /lib64/libluajit-5.1.so.2
export LUAJIT_LIB=/usr/local/lib
export LUAJIT_INC=/usr/local/include/luajit-2.0/

二、安裝 GraphicsMagick

   進入頁面:http://www.graphicsmagick.org/1.3/download.html

tar
zxvf GraphicsMagick-1.3.21.tar.gz cd GraphicsMagick-1.3.21 ./configure --prefix=/usr/local/graphicsmagick
make && make install

#驗證

   /usr/local/graphicsmagick/bin/gm version

三、安裝nginx

  進入頁面:http://tengine.taobao.org/opensource_cn.html

./configure --prefix=/usr/local/nginx \
            --dso-path=/usr/local/nginx/modules \
            
--with-http_realip_module \ --with-http_gzip_static_module \ --with-http_stub_status_module \ --with-http_concat_module \ --with-http_lua_module \ --with-pcre=/usr/local/src/pcre-8.37\ --with-zlib=/usr/local/src/zlib-1.2.8\ --with-openssl=/usr/local/src/openssl-1.0.0s\ --http-proxy-temp-path=/var/tmp/nginx/proxy_temp \ --http-fastcgi-temp-path=/var/tmp/nginx/fastcgi_temp \ --http-uwsgi-temp-path=/var/tmp/nginx/uwsgi_temp \ --http-scgi-temp-path=/var/tmp/nginx/cgi_temp \ --http-client-body-temp-path=/var/tmp/nginx/client_body_temp \ --http-log-path=/var/log/nginx/access.log \ --error-log-path=/var/log/nginx/error.log\ --with-ld-opt="-Wl,-rpath,$LUAJIT_LIB" make && make install #啟動nginx #測試配置檔案 /usr/local/nginx/sbin/nginx -t #啟動 /usr/local/nginx/sbin/nginx

 設定開機啟動

vi /etc/rc.d/init.d/nginx 
#!/bin/bash
# Tengine Startup script# processname: nginx
# chkconfig: - 85 15
# description: nginx is a World Wide Web server. It is used to serve
# pidfile: /var/run/nginx.pid
# config: /usr/local/nginx/conf/nginx.conf
nginxd=/usr/local/nginx/sbin/nginx
nginx_config=/usr/local/nginx/conf/nginx.conf
nginx_pid=/usr/local/nginx/logs/nginx.pid
RETVAL=0
prog="nginx"
# Source function library.
. /etc/rc.d/init.d/functions
# Source networking configuration.
. /etc/sysconfig/network
# Check that networking is up.
[ ${NETWORKING} = "no" ] && exit 0
[ -x $nginxd ] || exit 0
# Start nginx daemons functions.
start() {
if [ -e $nginx_pid ];then
echo "tengine already running...."
exit 1
fi
echo -n $"Starting $prog: "
daemon $nginxd -c ${nginx_config}
RETVAL=$?
echo
[ $RETVAL = 0 ] && touch /var/lock/subsys/nginx
return $RETVAL
}
# Stop nginx daemons functions.
stop() {
echo -n $"Stopping $prog: "
killproc $nginxd
RETVAL=$?
echo
[ $RETVAL = 0 ] && rm -f /var/lock/subsys/nginx /usr/local/nginx/logs/nginx.pid
}
reload() {
echo -n $"Reloading $prog: "
#kill -HUP `cat ${nginx_pid}`
killproc $nginxd -HUP
RETVAL=$?
echo
}
# See how we were called.
case "$1" in
start)
start
;;
stop)
stop
;;
reload)
reload
;;
restart)
stop
start
;;

status)
status $prog
RETVAL=$?
;;
*)
echo $"Usage: $prog {start|stop|restart|reload|status|help}"
exit 1
esac
exit $RETVAL

儲存退出

chmod 775 /etc/rc.d/init.d/nginx   #賦予檔案執行許可權
chkconfig  --level 012345 nginx on   #設定開機啟動
service nginx start

四、配置 nginx

  nginx.conf

http
   {
        lua_package_path '/usr/local/openresty/nginx/lua/?.lua;;';
        
        server {
                listen       80;
                server_name  img.rhythmk.org;
                root  /home/wwwroot/static/image;
                
                #對類似_100x100.gif/jpg/png/jpeg進行縮圖處理
                location ~* _([0-9]+)x([0-9]+)\.(gif|jpg|png|jpeg)$ {                 #匹配檔名規則
                        root  /home/wwwroot/static/image;                             #站點根目錄
                        set $image_root /home/wwwroot/static/image;                   #圖片目錄
                        set $thumbnail_root /home/wwwroot/static/thumbnail;           #縮圖存放目錄
                        #如果縮圖檔案存在,直接返回
                        set $file $thumbnail_root$uri;
                        if (-f $file) {
                                rewrite ^/(.*)$ /thumbnail/$1 last;
                        }
                        #如果縮圖檔案不存在,則應用縮圖模組處理
                        if (!-f $file) {
                                rewrite_by_lua_file lua/thumbnail.lua;
                        }
                }
         }
 
     #include conf/*.conf;
}

lua/thumbnail.lua

    local index = string.find(ngx.var.uri, "([0-9]+)x([0-9]+)");  
    local originalUri = string.sub(ngx.var.uri, 0, index-2);  
    local area = string.sub(ngx.var.uri, index);  
    index = string.find(area, "([.])");  
    area = string.sub(area, 0, index-1);  
  
    local image_sizes = {"80x80", "800x600", "40x40"};  
    function table.contains(table, element)  
       for _, value in pairs(table) do  
          if value == element then  
             return true  
          end  
       end  
       return false  
    end  
  
    if table.contains(image_sizes, area) then  
        local command = "gm convert " .. ngx.var.image_root .. originalUri .. " -thumbnail " .. area .. " -background gray -gravity center -extent " .. area .. " " .. ngx.var.file;  
        os.execute(command);  
        ngx.req.set_uri(ngx.var.uri, true);  
    else  
        ngx.exit(404);  
    end;  

相關推薦

nginx+lua_nginx+GraphicsMagick生成實時

暫做筆記,帶後續驗證通過後,再補充 1、2、3 步。 一、安裝 lua    首先確認是否安裝 readline yum -y install readline-devel ncurses-devel  進入頁面:http://www.lua.org/download.html wg

nginx+lua+GraphicsMagick生成實時略圖-CentOS7

系統 占用 buaa 使用 nginx xxx ali blog 判斷 背景 大多數的系統都會涉及縮略圖的處理,比如新聞系統和電商系統,特別是電商系統,每個商品大圖都會對應一系列尺寸的縮略圖用於不同業務場景的使用。部分系統也會生成不同尺寸的縮略圖以供PC、手機端、ipad

Nginx-Lua-FastDFS-GraphicsMagick動態圖片

Nginx-Lua-FastDFS-GraphicsMagick動態圖片縮圖 公司使用FastDFS來當作圖片伺服器,客戶端通過Nginx請求圖片。某些情況下,客戶端對請求的圖片有尺寸要求, 如 http://10.100.1.145/group1/M00/00/1

JAVA生成圖片、JAVA擷取圖片區域性內容

目前,google已經有了更好的處理JAVA圖片的工具,請搜尋:Thumbnailator    package com.ares.image.test; import java.awt.Color; import java.awt.Graphics; impor

Java——使用javacv生成視訊

轉載大佬文章,以備後期再次需要,親測使用有效 新增依賴 在pom.xml中新增依賴配置 <dependencies>   <dependency>     <groupId>org.bytedeco</groupId

Spring MVC上傳圖片,Java二進位制圖片寫入資料庫,生成

步驟:1.將圖片上傳到伺服器的一個磁碟目錄下。 2.將剛才上傳好的圖片寫入資料庫image欄位。 一、上傳圖片:使用的是spring mvc 對上傳的支援。 jsp 頁面: <form name="uploadForm" id="uploadForm" m

JAVA生成圖片、JAVA擷取圖片區域性內容的案例

JAVA生成圖片縮圖 package com.ares.image.test; import java.awt.Color; import java.awt.Graphics; import java.awt.Image; import java.awt.image.Bu

PHP 生成圖片函式

各位小盆友使用前記得開啟 GD 庫的支援哦,附上程式碼。 <?php /** * 生成縮圖函式(支援圖片格式:gif、jpeg、png和bmp) * @author ruxing.li * @param string $src 源圖片路徑 * @p

讀取24位 BMP 影象並生成 JPG (一)

            //對24位BMP進行解析     if(nbitcount==24){         int npad=(nsizeimage/nheight)-nwidth*3;         int ndata[]=new int[nheight*nwidth];         byte

php實現等比例生成圖片不失真

//等比例生成圖片縮圖不失真 function resizeImage($im,$maxwidth,$maxheight,$name,$filetype){     $pic_width = imagesx($im);     $pic_height = imagesy($

JAVA生成

-為節省網路或者儲存資源,需要將畫素大的圖片生成縮圖,以便展示 -具體實現如下(util類摘自網路) import java.awt.image.BufferedImage; import java.io.File; import java.io.Fi

ASP.NET根據URL生成網頁示例程式(C#語言)

工作中可能馬上要用到根據URL生成網頁縮圖功能,提前做好準備。 在網上找了份原始碼,但是有錯誤:當前執行緒不在單執行緒單元中,因此無法例項化 ActiveX 控制元件“8856f961-340a-11d0-a9”,解決後執行良好,記錄在此備用! 起始頁:Default

tp5中上傳圖片方法,並生成相應的方法

//接收上傳檔案的name$file = $this->_req->file("upload_head_image");//將上傳的檔案移動到public/uploads/user$info = $file->validate(['size'=>524

生成圖片

package com.ares.image.test; import java.awt.Color; import java.awt.Graphics; import java.awt.Image; import java.awt.image.BufferedImage; import java.io

java生成圖片

當圖片很大的時候,要生成預覽圖來提高網站響應速率,採用java的image相關類來生成縮圖 package com.liuc.core; import java.awt.Image; import java.awt.image.BufferedImage; import

禁止安卓在DCIM資料夾下生成.thumbnails資料夾的方法

~/.thumbnails你開啟看這個資料夾,是不是很奇怪。有好多你瀏覽過的圖片,包括u盤等移動介質。還有預覽的圖片也在其中,隨著時間可能達到1~2G有些個人隱私,也跑這個資料夾中了。比如我喜歡使用 ecryptfs-ulit 一個商用級別(免費)的加密資料層。這下也白乾了。所以要對付它。刪除它是不可能的,

利用nginx實時生成

http://n3yang.com/archives/2012/04/24/%E5%88%A9%E7%94%A8nginx%E5%AE%9E%E6%97%B6%E7%94%9F%E6%88%90%E7%BC%A9%E7

使用nginx和php實時產生

在做自動靜態化的時候,突然想到下面這個場景,也給出瞭解決方法。親,真的很實用,耐心看下去。 當我從後臺上傳一個截圖之後,480*800的截圖之後,當時就沒有壓縮出320*480的小縮圖。好吧,伺服器輪詢一下,全部產生出320*480的圖片。 那下一次呢,又有160*240的圖片了,又輪詢嗎,費

解決nginx利用image_filter動態生成不支援bmp

location ~* /(.+)_(\d+)x(\d+)\.(jpg|gif|png|bmp)$ { set $h $2; set $w $3; if ($h = "0") { rewrite /(.

nginx使用image_filter生成 -- fasdfs海量圖片整合

1 http_image_filter_module http_image_filter_module是nginx提供的整合圖片處理模組,支援nginx-0.7.54以後的版本,在網站訪問量不是很高磁