Tengine+Lua+GraphicsMagick
狂神声明 : 文章均为自己的学习笔记 , 转载一定注明出处 ; 编辑不易 , 防君子不防小人~共勉 !
使用 Tengine+Lua+GraphicsMagick 实现图片自动裁剪缩放
需求 : 图片处理
问题 :
- 互联网电商网站 ( PC, 移动)
- 大量不同需求的图片 (同一个图片需要不同尺寸的缩略图)
解决方案(两种策略) :
- 在上传图片时 , 就生成所需缩略图
- 根据请求指定尺寸的图片自动生成相应的缩略图片
- Tengine+Lua+GraphicsMagick
Tengine+Lua+GraphicsMagick
- Tengine
- 淘宝优化改良的Nginx , 并集成了Lua模块
- 负责展示图片和调度Lua脚本
- Lua
- 脚本语言 , 嵌入到应用程序中 , 提供灵活的扩展和定制功能
- Tengine通过Lua实现对GM操作
- 控制裁剪 , 缩放规格
- GraphicsMagick
- 强大的图片处理工具 , 没有UI的PS , 动态的生成图片 , 特别适用于互联网的应用
- 负责图片的处理
- 好处 :
- 按需处理
- 图片处理更加高效
- GM支持高并发下的图片处理 , 有效的保证了性能
安装配置
软件列表
- Tengine
- 安装包 : tengine-master.zip
- 下载地址 : https://github.com/alibaba/tengine
- Lua
- 安装包 : lua-5.3.1.tar.gz , LuaJIT-2.0.4.tar.gz (Lua依赖包)
- 下载地址 : http://www.lua.org/ftp/ , http://luajit.org/download.html
- GraphicsMagick
- 安装包 : GraphicsMagick-1.3.18.tar.gz
- 下载地址 : https://sourceforge.net/projects/graphicsmagick/files/graphicsmagick/
- 依赖包和类库 , 可yum安装
- libjpeg , libjpeg-devel
- libpng , libpng-devel
- giflib , giflib-devel
- freetype , freetype-devel
安装
- 源码安装---> ./configure make make install
- yum安装---> yum install ~
- Lua
- 安装依赖 ( readline&readline-devel )
- 安装Lua ( 源码编译安装 )
- 安装LuaJIT ( 源码编译安装 )
- Tengine
- 进入Tengine源码目录 , 使用Configure配置安装路径以及需要安装的模块
- 安装Tengine ( 源码编译安装 )
./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
- GraphicsMagick
- 安装依赖
- libjpeg , libjpeg-devel
- libpng , libpng-devel
- giflib , giflib-devel
- freetype , freetype-devel
- 进入GM源码目录 , 使用configure配置安装路径以及需要安装的模板
- 安装GM ( 源码编译安装 )
./configure --prefix=/usr/local/GraphicsMagick --enable-shared
- 安装依赖
配置
- Lua 脚本文件 ( ImageResizer.lua )
- 位置 : /usr/local/Tengine/lua/ImageResizer.lua
- 权限 : 可执行 (chomd 777 /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);
- Tengine 配置 ( nginx.config )
#user nobody; user root; # 裁剪图片需要root权限 worker_processes ; #error_log logs/error.log; #error_log logs/error.log notice; #error_log logs/error.log info; #pid logs/nginx.pid; events { worker_connections ; } # load modules compiled as Dynamic Shared Object (DSO) # #dso { # load ngx_http_fastcgi_module.so; # load ngx_http_rewrite_module.so; #} http { include mime.types; default_type application/octet-stream; #log_format main '$remote_addr - $remote_user [$time_local] "$request" ' # '$status $body_bytes_sent "$http_referer" ' # '"$http_user_agent" "$http_x_forwarded_for"'; #access_log logs/access.log main; sendfile on; #tcp_nopush on; #keepalive_timeout ; keepalive_timeout ; #gzip on; server { listen ; server_name img.itrip.project.bdqn.cn; root /data/itrip/uploadimg; location / { root /data/itrip/uploadimg; # 站点根目录 expires 1h; # 缓存时间 add_header Cache-Control max-age=; # 缓存时间 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/itrip/uploadimg; #这里必须设置,否则根目录,即 $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/itrip/uploadimg$; #设置原始图片路径,如:/document_root/.gif set $width $; # 设置裁剪/缩放的宽度 set $height $; # 设置裁剪/缩放的高度 set $ext $; # 图片文件格式后缀 content_by_lua_file /usr/local/Tengine/lua/ImageResizer.lua; #加载外部 Lua 文件 } } #charset koi8-r; #access_log logs/host.access.log main; #location / { # root html; # index index.html index.htm; #} #error_page /.html; # redirect server error pages to the static page /50x.html # error_page /50x.html; location = /50x.html { root html; } # proxy the PHP scripts to Apache listening on # #location ~ \.php$ { # proxy_pass http://127.0.0.1; #} # pass the PHP scripts to FastCGI server listening on # #location ~ \.php$ { # root html; # fastcgi_pass ; # fastcgi_index index.php; # fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name; # include fastcgi_params; #} # deny access to .htaccess files, if Apache's document root # concurs with nginx's one # #location ~ /\.ht { # deny all; #} } # another virtual host using mix of IP-, name-, and port-based configuration # #server { # listen ; # listen somename:; # server_name somename alias another.alias; # location / { # root html; # index index.html index.htm; # } #} # HTTPS server # #server { # listen ssl; # server_name localhost; # ssl_certificate cert.pem; # ssl_certificate_key cert.key; # ssl_session_cache shared:SSL:1m; # ssl_session_timeout 5m; # ssl_ciphers HIGH:!aNULL:!MD5; # ssl_prefer_server_ciphers on; # location / { # root html; # index index.html index.htm; # } #} }
Tengine+Lua+GraphicsMagick的更多相关文章
- Tengine + Lua + GraphicsMagick 实现图片自动裁剪/缩放
http://my.oschina.net/eduosi/blog/169606
- tengine lua 开源一 调用内部接口高效发送文件
tengine lua 开源一 调用内部接口高效发送文件 开源自己封装的sendfile 模块,可以高效的通过lua发送文件 源码地址:https://github.com/weinyzhou/Lu ...
- tengine + lua 实现流量拷贝
环境搭建参考地址:http://www.cnblogs.com/cp-miao/p/7505910.html cp.lua local res1, res2, action action = ngx. ...
- tengine+lua的安装步骤
我是在Red Hat 5.8 的虚机上安装的. Nginx的一些模块需要其他第三方库的支持,例如gzip模块需要zlib库,rewrite模块需要pcre库,ssl功能需要openssl库等.建议把这 ...
- 【技术干货】听阿里云CDN安防技术专家金九讲tengine+lua开发
一.介绍 二.安装 三.运行 四.开发 1.介绍 Tengine:轻量级.高性能.高并发.配置化.模块化.可扩展.可移植的Web和反向代理 服务器,Tengine是nginx超集,但做了很多优化,包含 ...
- OpenResty+lua+GraphicsMagick生成缩略图
1.安装GraphicsMagick 下载地址:http://sourceforge.net/projects/graphicsmagick/files/graphicsmagick/1.3.19/G ...
- OpenResty(Nginx)+Lua+GraphicsMagick实现缩略图功能
http://www.hopesoft.org/blog/?p=1188 http://www.imagemagick.org/download/ 2.用法 原始图片是input.jpg,尺寸:160 ...
- 如何安装nginx_lua_module模块,升级nginx,nginx-lua-fastdfs-GraphicsMagick动态生成缩略图,实现图片自动裁剪缩放
如何安装nginx_lua_module模块,升级nginx,nginx-lua-fastdfs-GraphicsMagick动态生成缩略图,实现图片自动裁剪缩放 参考网站:nginx-lua-fas ...
- nginx lua处理图片
user apache apache; worker_processes 4; worker_rlimit_nofile 100000; #error_log logs/error.log; #err ...
随机推荐
- python 的生成器,yield的使用
生成器 :含有yield 的关键字的函数就是一个生成器. 生成器的运行原理:调用函数时,当函数运行到yield时停止,返回值,下次调用时,就从这次的yield出继续执行,局部变量还是使用这次变量的值. ...
- 10. linux输入子系统/input 设备【转】
转自:https://www.cnblogs.com/crmn/articles/6696819.html 按键事件信息之上报绝对事件信息之上报相对事件信息之上报功能键驱动编写多点触控事件的上报 只产 ...
- 可持久化 trie 的简单入门
可持久化 $trie$ ....又是一个表里不一的东西..... 可持久化 $trie$ 的介绍: 和主席树类似的,其实可持久化就是体现在前缀信息的维护上(搞不懂这怎么就叫做可持久化了...) $ ...
- Oracle 数据文件迁移
背景 这两天做一个oracle数据库迁移,以前都是用exp.imp来走,这次用到了expdp.impdp,的确有些优势,但同时又想起了只是拷贝数据文件迁移的方式,其实这个方式不常用做迁移,更多用在磁盘 ...
- 洛谷P5206 [WC2019]数树 [容斥,DP,生成函数,NTT]
传送门 Orz神仙题,让我长了许多见识. 长式子警告 思路 y=1 由于y=1时会导致后面一些式子未定义,先抓出来. printf("%lld",opt==0?1:(opt==1? ...
- 转载:.Net 程序集 签名工具sn.exe 密钥对SNK文件 最基本的用法
.Net 程序集 签名工具sn.exe 密钥对SNK文件 最基本的用法 阐述签名工具这个概念之前,我先说说它不是什么: 1.它不是用于给程序集加密的工具,它与阻止Reflector或ILSpy对程序集 ...
- P2947 [USACO09MAR]向右看齐Look Up--单调栈
单调栈真的很好用呢! P2947 [USACO09MAR]向右看齐Look Up 题目描述 Farmer John's N (1 <= N <= 100,000) cows, conven ...
- Java中解决前端的跨域请求问题
在最近的分布式项目中,由于前端需要向后台请求数据,但不是同一个域名的,常用的ajax方法并不能成功调用,索然后台有数据返回,但是并不能被前端正常解析. 于是便查询知道了后台返回的数据格式的问题.不能用 ...
- Java获取Ip发送邮件
import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import javax.servlet. ...
- 【C++ Primer | 09】容器适配器
一.stack s.push(): 向栈内压入一个成员: s.pop(): 从栈顶弹出一个成员: s.empty(): 如果栈为空返回true,否则返回false: s.top(): 返回栈顶,但不删 ...