Nginx利用lua剪辑FastDFS中的图片

我们经常用FastDFS来做图片服务器,通过nginx来上传或者获取图片。本文要实现的功能是,当客户端要获取不同尺寸的图片是,lua根据url中的尺寸大小调用GraphicsMagick 的gm命令来剪辑图片。

1、软件准备:

GraphicsMagick-1.3.21.tar.gz
LuaJIT-2.0.2.tar.gz 
nginx-1.4.2.tar.gz
ngx_devel_kit-0.2.18.tar.gz 
v0.8.6.tar.gz(lua-nginx-module-0.8.6)
 
2、安装配置:
首先安装LuaJIT(lua解释器)
tar zxvf LuaJIT-2.0.2.tar.gz
cd LuaJIT-2.0.2
make && make install

配置环境变量

export LUAJIT_LIB=/usr/local/lib
export LUAJIT_INC=/usr/local/include/luajit-2.0

安装GraphicsMagick(剪辑图片的工具)

tar zxvf GraphicsMagick-1.3.21.tar.gz
cd GraphicsMagick
./configure --prefix=/data/local/GraphicsMagick --enable-shared
make && make install

查看GraphicsMagick支持的文件类型:

/data/local/GraphicsMagick/bin/gm -version

显示如下:

Feature Support:
Native Thread Safe yes
Large Files (> 32 bit) yes
Large Memory (> 32 bit) yes
BZIP yes
DPS no
FlashPix no
FreeType no
Ghostscript (Library) no
JBIG no
JPEG-2000 no
JPEG yes
Little CMS no
Loadable Modules no
OpenMP yes (201107)
PNG yes
TIFF no
TRIO no
UMEM no
WebP no
WMF no
X11 no
XML no
ZLIB yes Host type: x86_64-unknown-linux-gnu

若jpeg、zlib等不支持,需要先安装库文件:

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

在编译的时候需要加入参数,如添加xml支持:

./configure --prefix=/data/local/GraphicsMagick --with-xml=yes...

安装Nginx及lua扩展

解压lua模块

ngx_devel_kit-0.2.18.tar.gz
v0.8.6.tar.gz(lua-nginx-module-0.8.6

安装Nginx

tar zxvf nginx-1.4.2.tar.gz
cd nginx-1.4.2
./configure —prefix=/usr/local/nginx --add-module=lua-nginx-module-0.8.6 --add-module=ngx_devel_kit-0.2.18
make && make install

接下来配置nginx:

测试nginx扩展lua是否成功

nginx.conf server中添加一个location,匹配test:

location /test {
default_type text/html;
content_by_lua '
ngx.say("hello world")
ngx.log(ngx.ERR,"err err")
';
}

浏览器请求localhost/test时,返回hello world 则扩展成功。

启动nginx报错如下:

/usr/local/nginx/sbin/nginx: error while loading shared libraries: libluajit-5.1.so.2: cannot open shared object file: No such file or directory

解决:

find / -name libluajit-5.1.so.2

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

剪辑图片的lua脚本ImageResizer.lua:

local command = "/data/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);

nginx.conf:

server {
listen 80;
server_name localhost; #access_log logs/host.access.log main; location / {
root /data/images/00/00;(图片根目录)
} location ~* ^(.+\.(jpg|jpeg|gif|png))_(\d+)x(\d+)\.(jpg|jpeg|gif|png)$ {
root /data/images/00/00;
if (!-f $request_filename) { # 如果文件不存在时才需要裁剪
add_header X-Powered-By 'Lua GraphicsMagick';
add_header file-path $request_filename;
lua_code_cache off;
set $request_filepath /data/images/00/00$1;# 设置原始图片路径,如:/data/images/00/00/xxx.gif
set $width $3; # 设置裁剪/缩放的宽度
set $height $4; # 设置裁剪/缩放的高度
set $ext $5; # 图片文件格式后缀
content_by_lua_file conf/lua/ImageResizer.lua; #调用外部lua脚本
}
}
}

如上配置后,浏览器请求图片验证。

如http://localhost/1.jpg时,返回原图片:

请求http://localhost/1.jpg_300x280.jpg时,就返回300x280大小的图片了:

参考文章:

Nginx利用lua剪辑FastDFS图片的更多相关文章

  1. nginx利用lua实现nginx反向代理proxy_store缓存文件自删除

    标题有点绕口.我尽量把关键词都贴进去.之前因为自己的nginx安装了ngx_lua模块,但是又需要引入 但是安装luafilesystem又需要先安装luarocks,比较繁琐.这里就想记录一下安装过 ...

  2. FastDFS图片服务器(分布式文件系统)学习。

    参考:https://blog.csdn.net/hiqingtian/article/details/79413471 https://blog.csdn.net/sinat_40399893/ar ...

  3. openresty(nginx)、lua、drizzle调研

    一.概述: 1.研究目标:nginx中使用lua脚本,及nginx直接访问mysql,redis 2.需要安装的内容: openresty,mysql,redis 3.OpenResty (也称为 n ...

  4. nginx 增加 lua模块

    Nginx中的stub_status模块主要用于查看Nginx的一些状态信息. 本模块默认是不会编译进Nginx的,如果你要使用该模块,则要在编译安装Nginx时指定: ./configure –wi ...

  5. 分享知识-快乐自己:FastDFS 图片服务器的搭建

    使用一台虚拟机来模拟,只有一个Tracker.一个Storage服务,配置nginx访问图片. 1):安装依赖包 yum -y install zlib zlib-devel pcre pcre-de ...

  6. FastDFS图片服务器搭建

    *FastDFS图片服务器搭建准备:1.需要libfastcommon安装包 选择最新稳定版(libfastcommon-1.0.36.tar.gz)2.需要FastDFS安装包 选择最新稳定版(fa ...

  7. Nginx 整合 Lua 实现动态生成缩略图

    原文地址:Nginx 整合 Lua 实现动态生成缩略图 博客地址:http://www.extlight.com 一.前提 最近在开发一个项目,涉及到缩略图的功能,常见的生成缩略图的方案有以下几个: ...

  8. [转帖]FastDFS图片服务器单机安装步骤

    FastDFS图片服务器单机安装步骤 https://www.cnblogs.com/yuesf/p/11847103.html 前面已经讲 一张图秒懂微服务的网络架构,通过此文章可以了解FastDF ...

  9. Nginx使用Lua模块实现WAF

    前言:最近一段时间在写加密数据功能,对安全相关知识还是缺少积累,无意间接触到了WAF相关知识,刚好Nginx可以实现WAF功能,也简单学习了Lua这门语言,分享下 一.WAF产生的背景 过去企业通常会 ...

随机推荐

  1. libgdx学习记录12——圆角矩形CircleRect

    libgdx提供了ShapeRenderer这个工具,用它可以画点.画线.画圆.画矩形.画椭圆.画扇形,但是没有提供画圆角矩形的方法. 刚开始自己尝试分成8端,4端画直线,4端画扇形,发现多了半径几部 ...

  2. ES6 箭头函数易出错细节

    箭头函数表达式的语法比函数表达式更短,并且没有自己的this,arguments,super或 new.target. 箭头函数基本语法 (参数1, 参数2, -, 参数N) => { 函数声明 ...

  3. 【Android UI设计与开发】第04期:引导界面(四)仿人人网V5.9.2最新版引导界面

    这一篇我将会以人人网的引导界面为实例来展开详细的讲解,人人网的引导界面比较的新颖,不同于其他应用程序千篇一律的靠滑动来引导用户,而是以一个一个比较生动形象的动画效果展示在用户们的面前,有一种给人眼前一 ...

  4. git 跟踪提交记录

    一.克隆git仓库 git clone ssh://hwl@xxx/home/data/repositories/git.git 二.申明使用人信息,以便跟踪提交记录 $ git config --g ...

  5. Python魔术世界 1 如何使用Visual Studio在WIN10中一键安装Python3入门编程环境并测试Django

    本文通过VS安装Python和Django的环境,创建了一个Web程序,前后5分钟的操作,让你快速入门Python的编程世界,各种Python和Django的概念会在实战中给你娓娓道来. Django ...

  6. nodejs 监控代码变动实现ftp上传

    被动模式下 //https://www.npmjs.com/package/watch //文件同步功能 var watch = require('watch'); var path = requir ...

  7. 20135202闫佳歆--week6 进程的描述与创建--学习笔记

    此为个人学习笔记存档! week 6 进程的描述与创建 一.进程的描述 1.进程控制块task_struct 以下内容来自视频课件,存档在此. 为了管理进程,内核必须对每个进程进行清晰的描述,进程描述 ...

  8. Hugepage介绍以及实践

    在Linux 64位系统里面,默认内存是以4K的页面(Page)来管理的,当系统有非常多的内存的时候,管理这些内存的消耗就比较大;而HugePage使用2M大小的页面来减小管理开销. Hugepage ...

  9. Day Four

    站立式会议 站立式会议内容总结 442 今天:整合主页两个部分的逻辑代码,主页及其跳转基本完成 遇到的问题:无 明天:阅读图书界面逻辑部分完成 331 今天:学习java反射添加类数据到数据库 遇到问 ...

  10. JavaMail实现邮箱之间发送邮件功能

    package com.minstone.message.util; import java.util.Date; import java.util.Properties; import javax. ...