服务器搭建:3.2、openresty图片压缩之 lua调用GraphicsMagick

关于安装GraphicsMagic与配置环境变量参见 服务器搭建:3.1、openresty图片压缩之GraphicsMagick

1、如何在linux中直接使用压缩呢,看下面的命令:

#gm convert ./abd.jpg -thumbnail  100x100 .abd.100x100.jpg

注意,在一张图是原图,第二张图是压缩后的图,另外 中间部分的 100x100是压缩的尺寸。

2、用lua怎么做呢,下面是我的test.lua。

local source="/opt/local/test/adb.jpg"
local arae="300x300"
local target="/opt/local/test/dick."..arae..".png"
local pok=io.open('pok.txt','w')
print(pok)
local af=assert(pok)
print(af)
local mdx="gm convert "..source.." -thumbnail "..arae.." "..target
pok:write(mdx)
pok:close()
os.execute(mdx)

将文件名改成自己的文件路径 可以跑一下。

3、怎么在nginx中整合使用?

3.1 在nginx的 ./conf/nginx.conf  文件最后添加     include vhost/*.conf   意思是引入conf文件夹下的所有vhost中的.conf所有文件。

3.2 在vhost中创建一个   img.chimywin.com.conf    文件,并在其中插入代码如下:

server {
        listen 80;
        server_name  img.hdxw.com;
        root   /data/htdocs/source;
        index index.html index.htm index.php;
        location / {
            # 这里是把所有不存在的文件和目录,全都转到 index.php 处理
            #try_files $uri $uri/ /index.php?__q=$uri&$args;
        }
       location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|ico)$ {
            root /data/htdocs/source; 
            set $image_root /data/htdocs/source;
     
           set $file "$image_root$uri";   
            if (!-f $file)
            {
                content_by_lua_file lua/image.lua;  # 请注意这里,直接去调用lua文件处理见后面
            }
            proxy_next_upstream http_502 http_504 error timeout invalid_header;
            proxy_cache_valid  200 304 12h;
            proxy_cache_key $uri$is_args$args;
            index  index.html index.htm;
            expires 7d;
        }
}
 # 日志输出格式    
   log_format  access.img  '$remote_addr - $remote_user [$time_local] "$request" '
             '$status $body_bytes_sent "$http_referer" '
             '"$http_user_agent" $http_x_forwarded_for';
        access_log  /data/management/logs/img.access.log  access.img;
        /opt/openresty/nginx/conf/vhost/img.chimywin.com.conf

 

 3.3 在nginx目录下创建一个lua/image.lua

local file_exists = function(name)  
     local f=io.open(name,"r")  
    if f~=nil then 
                io.close(f) 
                return true
        else 
                return false 
        end  
 end
-- 访问图片的Uri,是一个相对路径 
 local newFileUri = ngx.var.uri; 
-- 访问图片的绝对路径  
 local target = ngx.var.file;  
 -- 是不是有符合要求的图片请求路径 
 local index = string.find(target, "([0-9]+)x([0-9]+)");    
 -- local pok=io.open('/var/html/pok.txt','w') 
 
 
-- 支持的size格式  这里没有使用
  local image_sizes = {"40x40", "60x60", "80x80", "100x100","120x120","140x140", "160x160", "180x180", "200x200",
 "220x220","240x240", "260x260", "280x280", "300x300","320x320","340x340", "360x360", "380x380", "400x400", "640x640", "600x600"};    
 -- 记录Lua压缩图日志
 -- pok:write("newFileUri="..newFileUri..";");
 -- pok:write("target="..target..";");
 -- pok:write("index="..index..";");
 -- 如果有
 if index then    
 -- local af=assert(pok) 
  -- pok:write("开始分析 ;");
        -- pok:write("newFileUri="..newFileUri..";");
        -- pok:write("target="..target..";");
        -- 截取 字符串   xxx/xxx/kl.jpg.100x100.jpg中 100x100以前的位置 : xxx/xxx/kl.jpg
    local source = string.sub(target, 0, index-2); 
         
         -- pok:write("source="..source..";");
         
         -- 二次截取获得 图片的规格
     local area = string.sub(target, index);
         
         -- pok:write("area="..area..";");
         
     index = string.find(area, "([.])");    
         if(index ~= nil )
         then
     area = string.sub(area, 0, index-1);    
         end 
         -- pok:write("area="..area..";");
         
        -- 拼接压缩图命令 # 注意这里的命令,后面解释
         local cmdexec="/usr/local/GraphicsMagick/bin/gm convert "..source.." -thumbnail "..area.." "..target
         os.execute(cmdexec);
         -- pok:write("cmdexec="..cmdexec..";");        
        
        -- pok:write("end") 
        -- pok:close()
        ngx.exec(ngx.var.uri)  
-- end  
 
 
   
-- if file_exists(ngx.var.file) then
  -- ngx.exec(ngx.var.uri)  
else  
   ngx.exit(404)  
end

 

说明一下:

i、--注释掉的部分是我为了测试写的日志文件。

ii、 local cmdexec="/usr/local/GraphicsMagick/bin/gm convert "..source.." -thumbnail "..area.." "..target  这里因为我安装后通过nginx无法调用 gm命令,暂时没有找到原因 ,所以这里直接用了绝对路径 来执行它。

 

 

转载于:https://my.oschina.net/u/2553994/blog/669116

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
温铭 王院生  and 13 贡献者 OpenResty最佳实践  开源书籍项目                             --by 温铭  “在2012年的时候,我加入到奇虎360公司,为新的产品做技术选型。由于之前一直混迹在python圈子里面,也接触过nginx c模块的高性能开发,一直想找到一个兼备python快速开发和nginx c模块高性能的产品。看到OpenResty后,有发现新大陆的感觉。 于是我在新产品里面力推OpenResty,团队里面几乎没有人支持,经过几轮性能测试,虽然轻松击败所有的其他方案,但是其他开发人员并不愿意参与到基于OpenResty这个“陌生”框架的开发中来。于是我一个人开始了OpenResty之旅,刚开始经历了各种技术挑战,庆幸有详细的文档,以及春哥和邮件列表里面热情的帮助,我成了团队里面bug最少和几乎不用加班的同学。 2014年,团队进来了一批新鲜血液,他们都很有技术品味,先后都选择OpenResty来作为技术方向。我不再是一个人在战斗,而另外一个新问题摆在团队面前,如何保证大家都能写出高质量的代码,都能对OpenResty有深入的了解?知识的沉淀和升华,成为一个迫在眉睫的问题。 我们选择把这几年的一些浅薄甚至可能是错误的实践,通过gitbook的方式公开出来,一方面有利于团队自身的技术积累,另一方面,也能让更多的高手一起加入,让OpenResty的使用变得更加简单,更多的应用到服务端开发中,毕竟人生苦短,少一些加班,多一些陪家人。 这本书的定位是最佳实践,同时会对OpenResty做简单的基础介绍。但是我们对初学者的建议是,在看书的同时下载并安装OpenResty,把官方网站的Presentations浏览和实践几遍。 希望你能enjoy OpenResty之旅!"

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值