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

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

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

https://github.com/openresty/lua-nginx-module

https://github.com/simpl/ngx_devel_kit

LuaJIT

http://luajit.org/download.html

configure \ ... --add-module=/path/lua-nginx-module \ --add-module=/path/ngx_devel_kit  make && make install

ImageMagick

http://www.p_w_picpathmagick.org/

修改

nginx-server.conf

  • convert_binp_w_picpathmagick_install_path/bin/convert

  • rewrite_by_Lua_filenginx-p_w_picpathmagick.Lua保存路径

    如果想允许更多的p_w_picpath大小,请修改nginx-p_w_picpathmagick.Lua中的p_w_picpath_sizes变量


    计算机网络服务器

    {


    听80;

    服务器名upload.qq.com;

    索引index.htmlindex.htmindex.php;

    root/h1/upload.QQ.com;

    地点~^(.\.php)(。*)${

    fastcgi_pass127.0.0.1:9000;

    fastcgi_indexindex.php;

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

    fastcgi_paramSCRIPT_FILENAME/path/to/PHP$fastcgi_SCRIPT_name;

    fastcgi_paramPATH_INFO$fastcgi_PATH_INFO;

    fastcgi_paramPATH_TRANSLATED$document_root$fastcgi_PATH_info;

    包含fcgi.conf

    }

    重写^/p_w_upload/p_w_picpath/(.*).jpg$/p_w_upload/p_w_picpath/$1.jpg!0x0最后一个;#初始解图显示信息为0x0图。

    #重写^/p_w_picpaths/(.*).jpg^/p_w_picpaths/.jpg!0x0最后一个;

    位置/p_w_upload/p_w_picpath/{

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

    设置$file"$p_w_picpath_root$uri

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

    如果(!-f$文件)

    {

    rewrite_by_Lua_file/usr/local/webserver/nginx/conf/nginx-p_w_picpathmagick.Lua;

    }

    最大过期时间;

    }



    位置~。*\.(js|css)?$

    {

    最大过期时间;

    }


    }

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


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


    -配置

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



    -解析uri

    函数parseUri(uri)

    local_,_,name,ext,size=string.find(uri,"(。)(%..)!(%dx%d)")

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

    -ngx.say(名称、大小);

    如果名称、大小和扩展名,则

    returnngx.var.p_w_picpath_root..名字..外部,尺寸

    其他

    return"",""

    目标

    目标


    函数文件存在(名称)

    localf=io.open(名称,“r”)

    如果f~=零,那么

    io.关闭(f)

    返回true

    其他

    返回false

    目标

    目标

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

    -ngx.say(姓名);

    函数大小存在(大小)

    对于_,成对的值(p_w_picpath_sizes)确实

    如果值==大小,则

    返回true

    目标

    目标


    返回false

    目标

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

    -ngx.say(大小);

    函数resize()

    本地ori_filename,size=parseUri(ngx.var.uri)

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

    -ngx.say(ori_filename,size);

    如果fileexists(ori_filename)==false或sizeExists(size)==false,则

    ngx.出口(404)

    目标


    本地命令=“”;

    如果size=='0x0',则

    command=table.concat({

    ngx.var.convert_bin,

    ori_文件名,

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

    “-重力东南-几何510-合成”,

    ngx.var.file,

    },"")

    其他

    command=table.concat({

    ngx.var.convert_bin,

    ori_文件名,

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

    "-重力东南-几何510-复合-调整大小",

    尺寸,

    ngx.var.file,

    },"")

    目标

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

    -ngx.say(命令);

    os.execute(命令)

    目标

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

    -ngx.say(命令);

    调整大小()



    接下来是nginx的mime设备。

    [root@localhostconf]#catmime.types


    类型{

    text/htmlhtmlhtmshtml;

    text/CSSCSS;

    text/XMLXMLplist;

    p_w_picpath/gifgifgif!320x320gif!64x64gif!140x140

    p_w_picpath/jpegjpegjpgjpg!320x320jpg!64x64jpg!140x140jpg!200x200jpg!0x0



    结果的详细地址是http://upload.qq.com/p_w_picpaths/13.jpg(初始图片)

    http://upload.qq.com/p_w_picpaths/13.jpg!0x0(简表)

    http://upload.qq.com/p_w_picpaths/13.jpg!64x64(缩略图)

    http://upload.qq.com/p_w_picpaths/13.jpg!320x320(略图)

    自定义

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


    手动测试图解决方案在系统软件中实现。

    转换src.jpglogo.gif-重力东南-几何510-复合dest.jpg

    欢迎分享,转载请注明来源:内存溢出

    原文地址: http://outofmemory.cn/zz/783772.html

    (0)
    打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
    上一篇 2022-05-04
    下一篇 2022-05-04

    发表评论

    登录后才能评论

    评论列表(0条)

    保存