栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

使用Tengine+Lua+GM实现图片自动裁剪缩放

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

使用Tengine+Lua+GM实现图片自动裁剪缩放

使用Tengine+Lua+GM实现图片自动裁剪缩放 一、应用场景
  • 互联网电商网站( PC、移动)

  • 大量不同需求的图片(同一个图片需要不同尺寸的缩略图)

两种策略生成缩略图

  • 在上传图片时,就生成所需缩略图

  • 根据请求指定尺寸的图片自动生成相应的缩略图片

    Tengine+Lua+GraphicsMagick

二、安装与配置 1、软件列表
软件名称安装包下载地址
Tenginetengine-master.ziphttps://github.com/alibaba/tengine
Lualua-5.3.1.tar.gz LuaJIT-2.0.4.tar.gz(Lua依赖包)http://www.lua.org/ftp/ http://luajit.org/download.html
GraphicsMagickGraphicsMagick-1.3.18.tar.gzhttps://sourceforge.net/projects/graphicsmagick/files/graphicsmagick/
2、依赖包和类库
# 使用阿里下载源
[root@desktop-dm818pf ~]# wget -O /etc/yum.repos.d/CentOS-base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
[root@desktop-dm818pf ~]# yum makecache					
# 安装依赖包和类库
[root@desktop-dm818pf ~]# yum install -y libjpeg libjpeg-devel libpng libpng-devel giflib giflib-devel freetype freetype-devel
3、安装Lua (1)安装依赖
[root@desktop-dm818pf ~]# yum install -y readline readline-devel gcc gcc-c++ pcre-devel openssl-devel zlib-devel
(2)安装Lua(源码编译安装)
[root@desktop-dm818pf ~]# tar zxvf lua-5.3.1.tar.gz
[root@desktop-dm818pf ~]# cd lua-5.3.1
[root@desktop-dm818pf lua-5.3.1]# make linux
[root@desktop-dm818pf lua-5.3.1]# make install
(3)安装LuaJIT(源码编译安装)
[root@desktop-dm818pf ~]# tar zxvf LuaJIT-2.0.4.tar.gz
[root@desktop-dm818pf ~]# cd ~/LuaJIT-2.0.4/
[root@desktop-dm818pf LuaJIT-2.0.4]# make
[root@desktop-dm818pf LuaJIT-2.0.4]# make install
(4)查看Lua版本
[root@bogon LuaJIT-2.0.4]# lua -v
Lua 5.3.1  Copyright (C) 1994-2015 Lua.org, PUC-Rio
4、安装Tengine

进入Tengine源码目录,使用configure配置安装路径以及需要安装的模块

[root@desktop-dm818pf ~]# unzip tengine-master.zip
[root@desktop-dm818pf ~]# cd tengine-master/

[root@desktop-dm818pf tengine-master]# ./configure --prefix=/usr/local/Tengine --dso-path=/usr/local/Tengine/modules --with-ipv6 --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

安装Tengine (源码编译安装)

[root@desktop-dm818pf tengine-master]# make && make install

配置tengine环境变量

[root@desktop-dm818pf tengine-master]# vim /etc/profile
# 增加tengine的环境变量
export tengine_home=/usr/local/Tengine
export PATH=$PATH:$tengine_home/sbin
[root@desktop-dm818pf tengine-master]# source /etc/profile

启动tengine

[root@desktop-dm818pf ~]# nginx
# 修复错误
[root@desktop-dm818pf ~]# ln -s /usr/local/lib/libluajit-5.1.so.2 /lib64/
[root@desktop-dm818pf ~]# nginx
#创建目录
[root@desktop-dm818pf ~]# mkdir -p /var/tmp/Tengine/client_body_temp
[root@desktop-dm818pf ~]# nginx

[root@desktop-dm818pf ~]# curl http://localhost
5、安装GraphicsMagick

安装依赖包和类库

[root@desktop-dm818pf ~]# yum install -y libjpeg libjpeg-devel libpng libpng-devel giflib giflib-devel freetype freetype-devel
#解压GraphicsMagick压缩包
[root@desktop-dm818pf ~]# tar zxvf GraphicsMagick-1.3.18.tar.gz
[root@desktop-dm818pf ~]# cd GraphicsMagick-1.3.18/
[root@desktop-dm818pf GraphicsMagick-1.3.18]# ./configure --prefix=/usr/local/GraphicsMagick --enable-shared
[root@desktop-dm818pf GraphicsMagick-1.3.18]# make && make install
#查看版本信息
[root@desktop-dm818pf GraphicsMagick-1.3.18]# /usr/local/GraphicsMagick/bin/gm version
6、配置Lua脚本文件

文件名:ImageResizer.lua

位置:/usr/local/Tengine/lua/ImageResizer.lua

权限:可执行

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

文件内容:

#注意GM安装目录
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);
7、Tengine配置

文件名:nginx.conf

位置:/usr/local/Tengine/conf/nginx.conf

文件内容:

#注意 需要将原有的server模块进行注释
# user root 需要放到最外层
user root;

# 新增一个server块
server {
        listen       80;
        server_name  img.itrip.project.bdqn.cn;
        root /data/itrip/uploadimg;

        location / {
             root /data/itrip/uploadimg; # 站点根目录
             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)$ {
           # 这里必须设置,否则根目录,
           # 即 $document_root 会是 Nginx 默认的 Nginx Root/html,在 Lua 中会得不到期望的值
           root /data/itrip/uploadimg;
           # 如果文件不存在时才需要裁剪
           if (!-f $request_filename) { 
              # 此HTTP Header无实际意义,用于测试
              add_header X-Powered-By 'Lua GraphicsMagick'; 
              # 此 HTTP Header无实际意义,用于测试
              add_header file-path $request_filename; 
              # 在编写外部 Lua脚本时,设置为off Nginx不会缓存 Lua,方便调试
              lua_code_cache on;  
              # 设置原始图片路径,如:/document_root/1.gif
              set $request_filepath /data/itrip/uploadimg$1; 
              set $width $3;     # 设置裁剪/缩放的宽度
              set $height $4;    # 设置裁剪/缩放的高度
              set $ext $5;      # 图片文件格式后缀
              # 加载外部 Lua 文件
              content_by_lua_file /usr/local/Tengine/lua/ImageResizer.lua; 
            }
        }
    }

创建站点目录:

mkdir -p /data/itrip/uploadimg

重启nginx:

nginx -s reload
三、功能测试

上传图片到站点目录/data/itrip/uploadimg

[root@desktop-dm818pf ~]# tree /data/itrip/uploadimg
/data/itrip/uploadimg
├── 111.jpg

在浏览器地址栏输入一下内容:

http://localhost/111.jpg_800x480.jpg

自动在站点目录下生成以111.jpg为原图的800x400的缩略图。

[root@desktop-dm818pf ~]# tree /data/itrip/uploadimg
/data/itrip/uploadimg
├── 111.jpg
└── 111.jpg_800x480.jpg
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/344129.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号