zoukankan      html  css  js  c++  java
  • nginx利用image_filter动态生成缩略图

    转自:http://www.nginx.cn/2160.html

    "我如今是有些图片须要生成缩略图。这个如今加了image_filter这个已经实现了。但我不知道怎么样才干訪问我上传的原图"

    刚開始认为也不太好弄。让他用程序区处理,实际上略微动脑筋分析一下也可以不改动程序实现动态生成缩略图且可以訪问原图。

    前提是须要定好图片的訪问规则。

    先来看一下什么是nginx的image filter模块。

    HttpImageFilterModule用来裁剪过大的图片到指定大小。是nginx自带模块,默认不会开启
    开启HttpImageFilterModule须要在编译要带上參数 --with-http_image_filter_module

    该模块主要有两个指令:
    语法: image_filter (test | size | resize width height | crop width height)
    默认是: 无
    可出现的上下文: location

    该指令指定图像的转化形式:

    test - 測试回复是否是JPEG、GIF、或PNG图片(不支持BMP等其它格式)。出错时返回415。
    size - 返回图片的JSON数据,比方:( "Img": ( "width": 100, "height": 100, "type": "gif"))
    resize - 依据设置按比例得减小图像,比方100*100的图片。而设置是50*25,减小后的图片为25*25。

    假设你仅仅想设置一个维度。能够用“-”取代。出错时返回415。
    crop - 依据设置按比例得减小图像。然后裁剪成跟设置一样大小的图片。

    比方100*100的图片。而设置是50*25,减小后的图片为50*50,Nginx会选取中间高度25的像素,形成50*25的图片,所以图片会有缺失。假设你仅仅想设置一个维度。能够用“-”取代。出错时返回415。

    语法: image_filter_buffer size
    默认值: image_filter_buffer 1M
    可出现的位置: http, server, location

    该指令设置单图片缓存的最大值,假设过滤的图片大小超过缓存大小,会报错返回415。

    如今開始时重点:

    有了如上认识再配合locaiont、if、image_filter 就能够让nginx动态生成缩略图了。

    如果你的图片位于/img文件夹下

    訪问缩略图方式

    http://www.xxx.cn/img/9GUMJR7200AJ0003_90x90.jpg

    訪问原图方式

    http://www.xxx.cn/img/9GUMJR7200AJ0003_90x0.jpg

    http://www.xxx.cn/img/9GUMJR7200AJ0003_0x50.jpg

    http://www.xxx.cn/img/9GUMJR7200AJ0003_0x0.jpg

    http://www.xxx.cn/img/9GUMJR7200AJ0003.jpg

    加入例如以下配置到server上下文就可以

            location ~* /img/(.+)_(d+)x(d+).(jpg|gif|png)$ {            
                set $h $2;
                set $w $3;
                if ($h = "0") {
                    rewrite /img/(.+)_(d+)x(d+).(jpg|gif|png)$ /img/$1.$4 last;
                }
                if ($w = "0") {
                    rewrite /img/(.+)_(d+)x(d+).(jpg|gif|png)$ /img/$1.$4 last;
                }
    
                #依据给定的长宽生成缩略图
                image_filter resize $h $w;
                #原图最大2M。要裁剪的图片超过2M返回415错误,须要调节參数image_filter_buffer 
                image_filter_buffer 2M;                          
                
                #error_page  415              /img/notfound.jpg;
                try_files /img/$1.$4  /img/notfound.jpg;	
            }
    
            location ~* /img {
                
            }

    推荐阅读:

    http://wiki.nginx.org/HttpImageFilterModule

    http://nginx.org/en/docs/http/ngx_http_image_filter_module.html

    http://cwtea.blog.51cto.com/4500217/1333142

  • 相关阅读:
    算法题之丢手绢问题
    Java接口成员变量和方法默认修饰符
    清空select下拉框的方法
    Java基础数据类型的默认值
    JVM内存区域划分
    Java中匿名内部类
    Java值传递
    部署web Service到tomcat
    Tomcat环境下配置数据源
    遇到和需要解决的问题
  • 原文地址:https://www.cnblogs.com/bhlsheji/p/5354480.html
Copyright © 2011-2022 走看看