Tengine+Lua+GM图片剪裁

Tengine+Lua+GM图片剪裁

环境:centOS 7
需求:同一个图片需要不同尺寸的缩略图
Tengine:nginx集成了Lua和GM。
Tengine调用lua脚本去操作GM,真正操作图片裁剪图片的是GM。
Tengine+Lua+GM图片剪裁
需要的依赖
Tengine+Lua+GM图片剪裁
1.打开虚拟机,启动centOS,使用finalShell连接虚拟机进行操作。把3个tar包+1个Tengine-master文件夹拖进/opt下:Tengine+Lua+GM图片剪裁
2.查看文件:cd /opt, ls
安装依赖库:yum -y install readline
完毕,安装开发依赖库:yum -y install readline-devel

3.安装lua
查看并进入lua:在opt下ls,cd lua-5.3.1,ls
装在linux系统下:make linux
安装:make install

4.安装LuaJIT
返回上一级到opt:cd …
解压LuaJIT:tar -zxvf LuaJIT的tar包名称
进入LuaJIT:cd LuaJIT-2.0.5,ls
编译:make
安装:make install
检查版本:lua -v

5.安装Tengine
返回上一级到opt:cd …
进入Tengine:cd tengine-master,ls
(由于Tengine是直接传过来的文件夹,所以没有权限,需要授权。如果是传进来的tar包自己进行解压则有权限)
给配置文件授权(所以权限:777):chmod 777 configure
查看权限:ll
使用配置文件安装:

./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

如果报错ssl:

./configure: error: 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= option.

解决办法:

SSL模块需要OpenSSL库。
执行:yum -y install openssl openssl-devel

配置文件安装完毕后,编译:make
安装:make install
检查Tengine是否安装成功:cd /usr/local/,ls
Tengine+Lua+GM图片剪裁
启动:cd Tengine/ ,ls,sbin/nginx
报错:软连接错误,目录找不到:
Tengine+Lua+GM图片剪裁
解决办法:
指定目录位置:

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

再报错,缺失文件夹:
Tengine+Lua+GM图片剪裁
解决办法:创建需要的文件夹

mkdir -p /var/tmp/Tengine

成功后,再次启动:sbin/nginx
到浏览器输入虚拟机IP测试访问:
Tengine+Lua+GM图片剪裁
6.关nginx
访问成功Tengine的前提是关闭nginx
Tengine+Lua+GM图片剪裁
7.装gm依赖库

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

8.安装gm
到opt:cd /opt/,ls
解压GraphicsMagick:tar -zxvf GraphicsMagick的tar包名称
进入GraphicsMagick:cd GraphicsMagick-1.3.18,ls
使用configure配置安装路径以及需要安装的模块:

./configure --prefix=/usr/local/GraphicsMagick --enable-shared

编译:make
安装:make install

9.关闭Tengine防止占用进程:
Tengine+Lua+GM图片剪裁
10.GM安装完毕,检查版本:

/usr/local/GraphicsMagick/bin/gm version

有如下版本信息即可
Tengine+Lua+GM图片剪裁
11.进入到/usr/local/Tengine,新建文件夹lua
Tengine+Lua+GM图片剪裁
编辑文本放入lua,ImageResizer.lua文本内容如下:

local command = "/usr/local/GraphicsMagick/bin/gm convert -auto-orient -strip " … 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);

(实际文本内容是两个点)
Tengine+Lua+GM图片剪裁
进入lua文件夹,并给.lua文件授权:
Tengine+Lua+GM图片剪裁
12.Tengine配置(nginx.conf ),并编辑文件 nginx.conf
Tengine+Lua+GM图片剪裁
修改第一处:
Tengine+Lua+GM图片剪裁
修改第二处:
Tengine+Lua+GM图片剪裁
创建图片路径:mkdir -p /data/itrip/uploadimg
修改第三处:
Tengine+Lua+GM图片剪裁
修改第四处,删除一行并增加如下内容:

expires 1h; # 缓存时间
add_header Cache-Control max-age=3600; # 缓存时间
access_log /var/log/Tengine/host_access.log;

Tengine+Lua+GM图片剪裁
创建log日志目录:mkdir -p /var/log/Tengine
Tengine+Lua+GM图片剪裁
修改第五处,增加图片裁剪的相关内容:
(引用时删掉注释)

location ~* ^(.+.(jpg|jpeg|gif|png))_(\d+)x(\d+).(jpg|jpeg|gif|png)$ {
root /data/itrip/uploadimg; #这里必须设置,否则根目录,即 $document_root 会是 Nginx 默认的
if (!-f $request_filename) { #如果文件不存在时才需要裁剪
lua_code_cache on; #在编写外部 Lua脚本时,设置为off Nginx不会缓存 Lua,方便调试
set $request_filepath /data/itrip/uploadimg$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 文件
}
}

Tengine+Lua+GM图片剪裁
完毕,保存并退出。
13.上传图片并测试
打开uploadimg文件夹,放入图片:
Tengine+Lua+GM图片剪裁
启动Tengine:/usr/local/Tengine/sbin/nginx
Tengine+Lua+GM图片剪裁
到浏览器访问时会报403,因为刚才关闭了
Tengine+Lua+GM图片剪裁
直接带图访问,成功:
Tengine+Lua+GM图片剪裁
14.到本机hosts文件配置图片域名地址并映射
Tengine+Lua+GM图片剪裁
Mac找到本机hosts文件参考如下:
添加链接描述
https://jingyan.baidu.com/article/f3ad7d0f55154309c3345bdd.html
修改完毕后到浏览器输入网址带图访问即可:
Tengine+Lua+GM图片剪裁
15.按规则裁剪图片:
Tengine+Lua+GM图片剪裁
完毕后图片路径会生成对应的图:
Tengine+Lua+GM图片剪裁

整理了2个小时,整理得这么优秀,感觉自己很棒!!!

上一篇:AI 事件驱动场景 Serverless 实践


下一篇:开源 Serverless 里程碑:Knative 1.0 来了