tenginx+ImageMagick+Lua自动缩略图

news/2024/11/9 16:28:55

      tenginx使用lua脚本调用GraphicsMagick软件的gm工具对原图进行切图,用户输出指定的参数就可以显示出相应大小的图片.


1.系统必须安装jpg,png,zlib库文件

[root@node1 ~]# yum install libpng libpng-devel libjpeg libjpeg-devel zlib zlib-deve perl  prel-devel freetype freetype-devel ghostscript ghostscript-devel -y


2.下载安装ImageMagick

[root@node1 ~]# tar xvf GraphicsMagick-1.3.23.tar.gz 

[root@node1 ~]# cd GraphicsMagick-1.3.23

[root@node1 GraphicsMagick-1.3.23]# ./configure --prefix=/usr/local/GraphicsMagick-1.3.23  --enable-shared

ZLIB        --with-zlib=yes  yes   --这三个扩展必须是yes,否则转换图处理会报错

JPEG v1      --with-jpeg=yes  yes

PNG         --with-png=yes   yes

Ghostscript   None      gs (8.70) --必须启用,否则合并图会报错

[root@node1 GraphicsMagick-1.3.23]# make && make install

[root@node1 GraphicsMagick-1.3.23]# vim /etc/ld.so.conf.d/GraphicsMagick.conf

include  /usr/local/GraphicsMagick-1.3.23/lib/    --添加一行

[root@node1 GraphicsMagick-1.3.23]# ll /usr/local/GraphicsMagick-1.3.23/bin

total 328

-rwxr-xr-x 1 root root 6498804 Nov 30  2015 gm

-rwxr-xr-x 1 root root    1332 Nov 30  2015 GraphicsMagick-config

-rwxr-xr-x 1 root root    1322 Nov 30  2015 GraphicsMagick++-config

-rwxr-xr-x 1 root root    1295 Nov 30  2015 GraphicsMagickWand-config

[root@node1 GraphicsMagick-1.3.23]#

 

3.下载安装tenginx
[root@node1 ~]# yum install lua*           --安装lua脚本
[root@node1 ~]# wget 
ftp://ftp.csx.cam.ac.uk/pub/soft ... re/pcre-8.38.tar.gz
[root@node1 ~]# tar xvf pcre-8.38.tar.gz 
[root@node1 ~]# mv pcre-8.38 /usr/local/
[root@node1 ~]# wget 
http://tengine.taobao.org/download/tengine-2.1.2.tar.gz

[root@node1 ~]# wget http://luajit.org/download/LuaJIT-2.0.4.tar.gz

[root@node1 ~]# tar xvf LuaJIT-2.0.4.tar.gz

[root@node1 ~]# cd LuaJIT-2.0.4

[root@node1 ~]# make && make install

[root@node1 ~]# tar xvf tengine-2.1.0.tar.gz 

[root@node1 ~]# cd tengine-2.1.0

[root@node1 tengine-2.1.0]# --prefix=/usr/local/tenginx-2.1.0 --with-file-aio --with-poll_module --with-pcre=/usr/local/pcre-8.37 --without-http_autoindex_module --without-http_ssi_module --without-mail_pop3_module --without-mail_smtp_module --without-mail_imap_module --with-http_lua_module --with-ld-opt=-Wl,-rpath,/usr/local/lib --with-http_realip_module --with-http_concat_module --add-module=/root/ngx_cache_purge-1.6 --add-module=/root/fastdfs-nginx-module/src

[root@node1 tengine-2.1.0]# make && make install

[root@node1 ~]# vim /usr/local/tenginx-2.1.0/conf/nginx.conf

location /lua {

     default_type 'text/plain';

     content_by_lua 'ngx.say("hello,lua")';

     }

   

location /upload  {

     set $image_root /usr/local/tenginx-2.1.0/html;

     set $file "$image_root$uri";

     if (!-f $file) {

        rewrite_by_lua '

          local index = string.find(ngx.var.uri, "([0-9]+)x([0-9]+)");

          if (index == nil) then

             ngx.exit(404);

          end

          local originalUri = string.sub(ngx.var.uri, 0, index-2);

          local area = string.sub(ngx.var.uri, index);

          index = string.find(area, "([.])");

          area = string.sub(area, 0, index-1);

          local image_sizes = {"160x160","400x400","100x100","200x200","300x300"};

          local image_big = {"80x60^", "120x90^", "160x120^"};

          function table.contains(table, element)

          for _, value in pairs(table) do

             if value == element then

                return true

                end

              end

                return false

          end

          print(table.contains(image_big, area))

          if table.contains(image_big, area) then

            local command = "/usr/local/GraphicsMagick-1.3.23/bin/gm convert " .. ngx.var.image_root ..  originalUri  .. " -thumbnail " .. area .. " -background gray -gravity center -extent " .. area .. " " .. ngx.var.image_root .. ngx.var.uri

            os.execute(command);

          else

            if table.contains(image_sizes, area) then

               local command = "/usr/local/GraphicsMagick-1.3.23/bin/gm convert " .. ngx.var.image_root ..  originalUri  .. " -thumbnail "  .. area .. " " .. ngx.var.image_root .. ngx.var.uri;

               os.execute(command);

            else

               ngx.exit(404);

            end;

          end;

              ';

          }

      }

[root@node1 ~]#


4.测试切图的效果

wKioL1fSbn-wSVOnAAB3rd3q624523.png-wh_50

wKiom1fSbdXQT-FdAAMNvzvnqws249.png-wh_50

wKiom1fSbdbB9BH6AAFdLiGt4gU438.png-wh_50

wKioL1fSbdeCAIvoAAL6GX5FC-4966.png-wh_50










本文转自 z597011036 51CTO博客,原文链接:http://blog.51cto.com/tongcheng/1717372,如需转载请自行联系原作者

http://www.niftyadmin.cn/n/1999567.html

相关文章

暧昧是什么?

暧昧是什么?暧昧是,比好朋友再亲一点,但比情人远一点。 暧昧是,你会常常在QQ等他在线。当他几天没有在线,你就会有些担心。 暧昧是,你会不时去他的BLOG看看有没有更新;而且你会留意字里行间&…

防火墙(二)SNAT和DNAT

防火墙(一)主机型防火墙 DNAT(Destination Network Address Translation,目的地址转换) 通常被叫做目的映谢。而SNAT(Source Network Address Translation,源地址转换)通常被叫做源映谢。 SNAT…

Debug下正常,而Release失败的真正原因

Debug下正常,而Release失败的真正原因-------------------------------------- 本文主要包含如下内容: 1. Debug 和 Release 编译方式的本质区别 2. 哪些情况下 Release 版会出错 2. 怎样“调试” Release 版的程序 -----------------------------------…

ffmpeg与H264编码指南

ffmpeg与H264编码指南 注:本文属于转载译文,原文地址:http://blog.csdn.net/vblittleboy/article/details/8982857。 英文地址:https://trac.ffmpeg.org/wiki/Encode/H.264。内容有一定出入,但是可以借鉴学习。 x264是…

C语言与汇编语言的相互调用

C语言与汇编语言的相互调用C语言是目前非常流行的一种编程语言,除具有高级语言使用方便灵活、数据处理能力强、 编程简单等优点外,还可实现汇编语言的大部分功能,如可直接对硬件进行操作、生成的 目标代码质量较高且执行的速度较快等。所以在…

超人汉考克里的机器人_爷青回,《雏蜂 伊甸之子》定档!超人气科幻漫画强势来袭...

历经近4年制作,由有妖气超人气科幻漫画《雏蜂》改编的网络动画《雏蜂-伊甸之子》终于定档11月18日,在YOU&KU动漫独家哦~作为国内较早开始创作的科幻题材漫画,《雏蜂》迄今在有妖气漫画连载已经超过10年,作者:白猫。…

电子科大电气工程导师介绍绍_电子科大通信|考研不易,站好复试最后一班岗!...

导师介绍T师兄,2016 年以专业课125分的成绩进入电子科技大学通信学院深造,攻读通信与信息系统学术硕士,获得一等奖学金;本科、研究生均就读于电子科大,熟悉学院考研考情、师资分布与专业研究。长期从事专业课信号与系统…

用C写的邮件发送程序

编程环境:WinXP SP2,Visual Studio 2005 Pro 参考资料:《HowTo.SMTP》,《SendMail》(NextFly写的),《MSDN 2005》 // SendMail.cpp : 定义控制台应用程序的入口点。// #i nclude "stdafx.h" …