运维与监控  - 讨论区

标题:nginx使用技巧 之 在线图片缩放和裁剪

2013年11月29日 星期五 17:47

之前我撰写了一篇文章,讲述了如何 使用 SLIR 对图片进行在线缩放、裁剪
SLIR的优势在于:它是一组PHP代码,我们可以很方便的根据自己的实际需求进行改装。
如果你的要求不高,那还有更简单的方案:使用nginx自带的image_filter模块来实现图片的缩放和裁剪。

我习惯使用yum安装EPEL软件源中的nginx软件,虽然版本不一定是最新,但安装简单方便,并且已经包括了image_filter模块。

安装完毕后增加一个nginx配置文件 /etc/nginx/conf.d/image.conf :

server {
    listen 80;
    server_name _;
    location ~* ^/resize/([\d\-]+)/([\d\-]+)/(.+)$ {
        alias /var/www/html/$3;
        image_filter resize $1 $2;
        image_filter_buffer 8M;
    }
    location ~* ^/crop/([\d\-]+)/([\d\-]+)/(.+)$ {
        alias /var/www/html/$3;
        image_filter crop $1 $2;
        image_filter_buffer 8M;
    }
   
    location / {
        root /var/www/html;
    }
}
举例说明如何引用图片:
原图:http://out.domain.name/img/1.jpg
缩放,宽度为 600px : http://out.domain.name/resize/600/-/img/1.jpg
缩放,高度为 400px:http://out.domain.name/resize/-/400/img/1.jpg
裁剪为方形,400x400px: http://out.domain.name/crop/400/400/img/1.jpg

是不是非常简单明了?
需要注意的一点:由于图片缩放是在nginx进程内部进行的,而图片处理是一个非常耗时的任务,所以需要将nginx的进程数适当加大,以便能够充分利用多核CPU的资源,加速处理多个并发请求:

worker_processes 16;
另外,nginx本身并不会缓存裁剪缩放后的图片,所以每次请求都会重新处理,强烈建议配合squid或者CDN使用。

更多image_filter相关的资料可以参考:


如下红色区域有误,请重新填写。

    你的回复:

    请 登录 后回复。还没有在Zeuux哲思注册吗?现在 注册 !

    Zeuux © 2024

    京ICP备05028076号