nginx php image,nginx+lua+image实现上传图片裁剪和加水印

Lua JITconfigure \

...

--add-module=/path/lua-nginx-module \

--add-module=/path/ngx_devel_kit

make && make install

ImageMagick

Modify

nginx-server.confconvert_bin p_w_picpathmagick_install_path/bin/convert

rewrite_by_lua_file nginx-p_w_picpathmagick.lua save path

if want to allow more p_w_picpath size, please modify the p_w_picpath_sizes variable in nginx-p_w_picpathmagick.lua

server

{

listen       80;

server_name upload.qq.com;

index index.html index.htm index.php;

root  /h1/upload.qq.com;

location ~ ^(.+\.php)(.*)$ {

fastcgi_pass 127.0.0.1:9000;

fastcgi_index index.php;

fastcgi_split_path_info ^(.+\.php)(.*)$;

fastcgi_param SCRIPT_FILENAME /path/to/php$fastcgi_script_name;

fastcgi_param PATH_INFO $fastcgi_path_info;

fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;

include fcgi.conf;

}

rewrite ^/p_w_upload/p_w_picpath/(.*).jpg$  /p_w_upload/p_w_picpath/$1.jpg!0x0 last;#处理原始图显示为0x0图

# rewrite ^/p_w_picpaths/(.*).jpg  ^/p_w_picpaths/$1.jpg!0x0 last;

location /p_w_upload/p_w_picpath/ {

set $p_w_picpath_root "/htdoc/upload.qq.com";

set $file "$p_w_picpath_root$uri";

set $convert_bin "/usr/local/bin/convert";

if (!-f $file)

{

rewrite_by_lua_file /usr/local/webserver/nginx/conf/nginx-p_w_picpathmagick.lua;

}

expires max;

}

location ~ .*\.(js|css)?$

{

expires max;

}

}

下面是lua代码 nginx-p_w_picpathmagick.lua:

-- http://domain.com/111/photo/201411/05/5459e306820af926411357_320x320.jpg

-- config

local p_w_picpath_sizes = { "640x640", "320x320", "124x124", "140x140", "64x64", "60x60", "32x32", "0x0" }

-- parse uri

function parseUri(uri)

local _, _, name, ext, size = string.find(uri, "(.+)(%..+)!(%d+x%d+)")

--ngx.header.content_type = "text/plain";

--ngx.say(name,size);

if name and size and ext then

return ngx.var.p_w_picpath_root .. name .. ext, size

else

return "",""

end

end

function fileExists(name)

local f = io.open(name, "r")

if f ~= nil then

io.close(f)

return true

else

return false

end

end

--ngx.header.content_type = "text/plain";

--ngx.say(name);

function sizeExists(size)

for _, value in pairs(p_w_picpath_sizes) do

if value == size then

return true

end

end

return false

end

--ngx.header.content_type = "text/plain";

--ngx.say(size);

function resize()

local ori_filename, size = parseUri(ngx.var.uri)

--ngx.header.content_type = "text/plain";

--ngx.say(ori_filename,size);

if fileExists(ori_filename) == false or sizeExists(size) == false then

ngx.exit(404)

end

local command = '';

if size == '0x0' then

command = table.concat({

ngx.var.convert_bin,

ori_filename,

"/usr/local/webserver/nginx/conf/logo.png",

"-gravity southeast -geometry +5+10 -composite",

ngx.var.file,

}, " ")

else

command = table.concat({

ngx.var.convert_bin,

ori_filename,

"/usr/local/webserver/nginx/conf/logo.png",

"-gravity southeast -geometry +5+10 -composite -resize",

size,

ngx.var.file,

}, " ")

end

--ngx.header.content_type = "text/plain";

--ngx.say(command);

os.execute(command)

end

--ngx.header.content_type = "text/plain";

--ngx.say(command);

resize()

再下面是nginx的mime配置

[root@localhost conf]# cat mime.types

types {

text/html                             html htm shtml;

text/css                              css;

text/xml                              xml plist;

p_w_picpath/gif                             gif gif!320x320 gif!64x64 gif!140x140;

p_w_picpath/jpeg                            jpeg jpg jpg!320x320 jpg!64x64 jpg!140x140 jpg!200x200 jpg!0x0;

尺寸自己定义

/usr/local/webserver/nginx/conf/logo.png 这个是水印图

手动测试图片处理在系统里执行

convert src.jpg logo.gif -gravity southeast -geometry +5+10 -composite dest.jpg

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值