linux環境下使用Tengine+Lua+GraphicsMagick實現圖片自動裁剪縮放

linux環境下使用Tengine+Lua+GraphicsMagick實現圖片自動裁剪縮放

本文由個人總結,如需轉載使用請標明原著及原文地址

有人說簡單的圖片縮放,使用css樣式就行了,但是css進行設置有幾個明顯的缺點

1.圖片大的話,加載速度慢,浪費空間

2.如果設置的比例不對,圖片會變形

使用Tengine+Lua+GraphicsMagick實現圖片自動裁剪縮放的好處在於,這種方法能進行等比縮放,不會使得圖片變形,而且生成較小的縮略圖,能有效提高用戶加載速度

首先要下載相關資源包

不想自己找的可以使用我提供的,超鏈接在這!!!!!

總共有4個文件,3個後綴名爲.tar.gz的,一個爲.zip的,3個.tar.gz的直接拷入linux環境下,.zip的解壓後再拷入linux環境下

1.安裝lua

1.1安裝依賴

lua依賴於readline和readline-devel,可以先使用yum安裝

yum install readline
yum install readline-devel

1.2安裝lua

先進入到lua壓縮包所在的文件夾,然後進行解tar

cd Desktop/tengine/
tar -zxvf lua-5.3.1.tar.gz

解壓完成後,進入解壓後的文件夾,執行make linux指令(指定安裝環境)

cd lua-5.3.1
make linux

然後執行make install

make install

1.3安裝lua-JIT

接下來安裝lua-JIT

和安裝lua的步驟相同,在這提供代碼,不重複說明

tar -zxvf LuaJIT-2.0.4.tar.gz 
cd LuaJIT-2.0.4
make
make install

安裝完成後可以執行以下指令查看lua是否安裝成功

lua -v

2.安裝tengine

2.1執行configure

依賴openssl,如果沒安裝會報錯:

SSL modules require the OpenSSL library.
You can either do not enable the modules, or install the OpenSSL library
into the system, or build the OpenSSL library statically from the source
with nginx by using --with-openssl=<path> option.

yum -y install openssl openssl-devel

然後進入到tengine文件夾中執行配置指令

其中sudo chmod 777 是獲取文件的執行權限

cd tengine-master/
sudo chmod 777 ./configure
./configure --prefix=/usr/local/Tengine --dso-path=/usr/local/Tengine/modules --with-http_realip_module --with-http_gzip_static_module --with-http_stub_status_module --with-http_concat_module --with-http_lua_module  --http-proxy-temp-path=/var/tmp/Tengine/proxy_temp --http-fastcgi-temp-path=/var/tmp/Tengine/fastcgi_temp --http-uwsgi-temp-path=/var/tmp/Tengine/uwsgi_temp --http-scgi-temp-path=/var/tmp/Tengine/cgi_temp --http-client-body-temp-path=/var/tmp/Tengine/client_body_temp --http-log-path=/var/log/Tengine/access.log --error-log-path=/var/log/Tengine/error.log

2.2執行make和make install指令

配置文件執行完後執行make和make install指令

make
make install

安裝完成後可以執行以下命令測試是否安裝完成,如果遇到報錯請繼續往下看!!!!!

tengine是基於nginx的一個軟件,如果想了解nginx配置的話可以看看我的另一篇文章

/usr/local/Tengine/sbin/nginx

2.3報錯解決

報錯:

找不到libluajit-5.1.so.2庫
[root@localhost tengine-master]# /usr/local/Tengine/sbin/nginx
/usr/local/Tengine/sbin/nginx: error while loading shared libraries: libluajit-5.1.so.2: cannot open shared object file: No such file or directory

linux64位常見問題,找到缺失的庫的位置,做一個軟鏈到lib64文件夾下就行

獲取文件位置

whereis libluajit-5.1.so.2

製作軟鏈,執行後沒有提示信息,如果想看到效果可以到lib64文件夾下看看是否存在libluajit-5.1.so.2文件

ln -s /usr/local/lib/libluajit-5.1.so.2 /lib64/libluajit-5.1.so.2

報錯:
nginx: [emerg] mkdir() "/var/tmp/Tengine/client_body_temp" failed (2: No such file or directory)

原因是文件夾找不到之前執行配置文件的時候,設置的這個文件夾在系統中不存在

手動創建對應的文件夾,執行完也是沒有成功提示,可以自行進到目錄中查看

mkdir -p /var/tmp/Tengine/client_body_temp

3.安裝GraphicsMagick

3.1安裝依賴

GraphicsMagick依賴的包有以下這些,請先安裝這些環境

libjpeg

libjpeg-devel

libpng

libpng-devel

giflib

giflib-devel

freetype

freetype-devel

yum install libjpeg libjpeg-devel libpng libpng-devel giflib giflib-devel freetype freetype-devel

3.2解tar,執行configure

tar -zxvf GraphicsMagick-1.3.18.tar.gz 
cd GraphicsMagick-1.3.18
./configure --prefix=/usr/local/GraphicsMagick --enable-shared

3.3執行make和make install

make
make install

完成後可以執行以下指令驗證是否安裝完成

/usr/local/GraphicsMagick/bin/gm version

4.圖片裁剪配置

Tengine+Lua+GraphicsMagick安裝完成後,就可以進行圖片裁剪的配置

4.1在Tengine中創建lua腳本文件

這個文件中能配置裁剪圖片的具體參數等信息

創建lua文件夾

mkdir -p /usr/local/Tengine/lua

創建ImageResizer.lua文件,並進入編輯

vim /usr/local/Tengine/lua/ImageResizer.lua

在文件中寫入以下內容後,保存退出

local command = "/usr/local/GraphicsMagick/bin/gm convert " .. ngx.var.request_filepath .. " -resize " .. ngx.var.width .. "x" .. ngx.var.height .. " +profile \"*\" " .. ngx.var.request_filepath .. "_" .. ngx.var.width .. "x" .. ngx.var.height .. "." .. ngx.var.ext;
os.execute(command);
ngx.exec(ngx.var.request_uri);

最後將文件權限設置爲可執行

chmod 777 /usr/local/Tengine/lua/ImageResizer.lua 

4.2在nginx.conf中配置裁剪規則

打開tengine目錄下的nginx.conf文件,將其中的server替換成以下內容

vim /usr/local/Tengine/conf/nginx.conf
server {
        listen       80;
        server_name  Devil;
        root /data/nginx;    #nginx的資源路徑,圖片和頁面放在此路徑下才能使用,
                            #下面有關路徑的配置同理

        location / {
             root /data/nginx; # 站點根目錄
             expires 1h;    # 緩存時間
             add_header Cache-Control max-age=3600; # 緩存時間
             access_log   /var/log/Tengine/host_access.log;
        }
        
        #圖片裁剪的配置
        #如果 url 格式如:xxxx.gif_數字x數字.gif
        location ~* ^(.+\.(jpg|jpeg|gif|png))_(\d+)x(\d+)\.(jpg|jpeg|gif|png)$ {
           root /data/nginx;    
        #這裏必須設置,否則根目錄,即 $document_root 會是 Nginx 默認的 Nginx Root/html,
        #在 Lua 中會得不到期望的值
           if (!-f $request_filename) { #如果文件不存在時才需要裁剪
              add_header X-Powered-By 'Lua GraphicsMagick';  
            #此HTTP Header無實際意義,用於測試
              add_header file-path $request_filename;  
            #此 HTTP Header無實際意義,用於測試
              lua_code_cache on;  
            #在編寫外部 Lua腳本時,設置爲off Nginx不會緩存 Lua,方便調試
              set $request_filepath /data/nginx$1;  
		    #設置原始圖片路徑,如:/document_root/1.gif
              set $width $3;     # 設置裁剪/縮放的寬度
              set $height $4;    # 設置裁剪/縮放的高度
              set $ext $5;      # 圖片文件格式後綴
              content_by_lua_file /usr/local/Tengine/lua/ImageResizer.lua;  
            #加載外部 Lua 文件
            }
        }
}

 然後驗證nginx.conf文件是否符合規則,執行第一句話,如果結果中包含successful,那麼執行第二句的重啓nginx命令

/usr/local/Tengine/sbin/nginx -t        
/usr/local/Tengine/sbin/nginx -s reload

接來下就可以隨便拷一張圖進去測試了,我這裏tengine使用的資源目錄是/data/nginx,大家要注意將文件拷到自己指定的目錄下

如果資源文件夾中不存在所需比例的圖片,會自動生成,如果存在的話會直接調用

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章