电商类网站 图片自动生成不同尺寸缩略图策略(Tengine + Lua + GraphisMargick)

电商类网站 图片自动生成不同尺寸缩略图策略(Tengine + Lua + GraphisMargick)

场景分析

在进行电商类网站开发时, 常常需要对一图片进行不同尺寸展示, 如果仅仅依靠手工调整,工作量十分巨大, 为此需要一个自动处理的技术来实现这个功能 t

Tengine + Lua + GraphisMargicTk

  • 简单介绍:
  1. Tengine: 淘宝优化改良的Nginx, 并集成了Lua模块 负责图片的展示和调度Lua脚本

  2. 脚本语言 嵌入到程序中, 提供灵活的定制功能 Tengine通过Lua实现对GM操作 进行控制裁剪 和缩放规格

  3. GraphicsMagick

    强大的图片处理工具 , 不依赖UI的ps 动态生成图片

    支持高并发场景下的性能需求

​ 注 tengine安装有点繁琐 仔细配置

  1. 使用configure安装 直接复制这段命令 如果提示权限不足

    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

    1.2 make

​ 1.3 make install

​ 1.4 启动 和Nignx启动方式很像

/usr/local/Tengine/sbin/nginx

如果报错 error while loading shared libraries: libluajit-5.1.so.2: cannot open shared object file: No such file or directoryerror

执行: ln -s /usr/local/lib/libluajit-5.1.so.2 /lib64/libluajit-5.1.so.2 (注意空格 以及你出错提示的那个文件版本 我这是5.1)

​ 1.5 如果还有报错 根据提示可以自行处理

​ 1.6 重新执行启动命令 看到如下图说明Tengine安装成功

在这里插入图片描述

  • Lua

    lua-5.3.1.tar.gz

    ​ LuaJIT-2.0.4.tar.gz

    • 相关依赖

      1. yum install readline
      2. yum install readline-devel
    • 解压后安装lua 和 luaJIT

      1.make linux

      2.make install (这里如果报错 按照提示删除一个文件)

    • 测试

      输入 lua -v 看看能否输出版本信息 能即成功

  • GraphicsMagick

    GraphicsMagick-1.3.18.tar.gz

    • 安装相关依赖

      • libjpeg libjpeg-devel

      • libpng libpng-devel

      • giflib giflib-devel

      • freetype freetype-devel

    • 进入该目录configure安装

      1.1 命令 ./configure --prefix=/usr/local/GraphicsMagick --enable-shared

      1.2 make

      1.3 make install

      1.4 检验是否成功 /usr/local/GraphicsMagick/bin/gm version 看看能否输出版本信息


    核心配置

    Lua脚本文件

    • 位置 /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);

  •     + 授权为可执行的文件  因为lua以后要交给Tengine来操作 所以进行如下
    

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

Tengine配置

​ 1.进入配置文件 添加user root

​ 2.server节点中添加 如下配置

 location / {
         root /data/itrip/uploadimg; # 站点根目录
         expires 1h;    
         add_header Cache-Control max-age=3600; # 缓存时间
         access_log   /var/log/Tengine/host_access.log;
    }

   
    location ~* ^(.+\.(jpg|jpeg|gif|png))_(\d+)x(\d+)\.(jpg|jpeg|gif|png)$ {
       root /data/itrip/uploadimg;  
       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; 
          set $request_filepath /data/itrip/uploadimg$1;  
          set $width $3;    
          set $height $4;
          set $ext $5;   
          content_by_lua_file /usr/local/Tengine/lua/ImageResizer.lua; 
        }
    }  
  1. 重启nginx

  2. 在上面配置文件提到的路径 放置一个测试图片 然后访问Tengine 如下图

在这里插入图片描述

5.现在我们变更需求 换一个尺寸 60x60如下图

在这里插入图片描述

OK 至此 大功告成


在对各个依赖和安装包 解压 安装时需要注意都要 进入该目录下 否则就会提示命令不存在之类, 此外每一步都要慢慢来 不急于看结果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值