转自: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

nginx利用image_filter动态生成缩略图的更多相关文章

  1. 如何安装nginx_lua_module模块,升级nginx,nginx-lua-fastdfs-GraphicsMagick动态生成缩略图,实现图片自动裁剪缩放

    如何安装nginx_lua_module模块,升级nginx,nginx-lua-fastdfs-GraphicsMagick动态生成缩略图,实现图片自动裁剪缩放 参考网站:nginx-lua-fas ...

  2. Nginx 整合 Lua 实现动态生成缩略图

    原文地址:Nginx 整合 Lua 实现动态生成缩略图 博客地址:http://www.extlight.com 一.前提 最近在开发一个项目,涉及到缩略图的功能,常见的生成缩略图的方案有以下几个: ...

  3. openresty + lua-resty-weedfs + weedfs + graphicsmagick动态生成缩略图(类似淘宝方案)

    openresty + lua-resty-weedfs + weedfs + graphicsmagick动态生成缩略图(类似淘宝方案) --大部分的网站都要涉及到图片缩略图的处理,比如新闻配图,电 ...

  4. 利用Java动态生成 PDF 文档

    利用Java动态生成 PDF 文档,则需要开源的API.首先我们先想象需求,在企业应用中,客户会提出一些复杂的需求,比如会针对具体的业务,构建比较典型的具备文档性质的内容,一般会导出PDF进行存档.那 ...

  5. nginx实现本地图片生成缩略图

    nginx可以实现图片的缩略图效果,很多网站为了前端静态资源相应的性能会给大图自动生成一个小图,比如我们经常会在网上看到bd_64x64.png这种格式,淘宝上的小图经常会看到xxx.jpg_100x ...

  6. 利用runtime动态生成对象?

    利用runtime我们能够动态生成对象.属性.方法这特性 假定我们要动态生成DYViewController,并为它创建属性propertyName 1)对象名 NSString *class = @ ...

  7. 利用JS动态生成隔行换色HTML表格

    用JS生成动态生成表格,行.列由用户输入,并使表格隔行换色 方法一. 代码: <!DOCTYPE html> 2 <html> 3 <head> 4 <tit ...

  8. 【Nginx】面试官竟然问我Nginx如何生成缩略图,还好我看了这篇文章!!

    写在前面 今天想写一篇使用Nginx如何生成缩略图的文章,想了半天题目也没想好,这个题目还是一名读者帮我起的.起因就是这位读者最近出去面试,面试官正好问了一个Nginx如何生成缩略图的问题.还别说,就 ...

  9. (转)php 根据url自动生成缩略图并处理高并发问题

    分享是一种精神,与技术高低无关!   图片缩略图动态生成- [代码编程] 2011-08-23 版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明http://www.blogbus.c ...

随机推荐

  1. [转载]12款免费与开源的NoSQL数据库介绍

    Naresh Kumar是位软件工程师与热情的博主,对于编程与新事物拥有极大的兴趣,非常乐于与其他开发者和程序员分享技术上的研究成果.近日,Naresh撰文谈到了12款知名的免费.开源NoSQL数据库 ...

  2. UVa 11054 Wine trading in Gergovia

    题意: 直线上有n个等距的酒庄,每个酒庄对酒的需求量为ai(正数说明需要买酒,负数需要卖酒),而且保证所有的酒庄供需平衡. 搬运x个单位的酒到相邻的酒庄需要x个劳动力,求要使所有酒庄供需平衡最少需要多 ...

  3. 安装ejabberd2并配置MySQL为其数据库

    以前用过openfire做为服务器,但是openfire的集群支持不是很好,所以改用Ejabberd,由于它是用Erlang语言开发的,其并发率与分布式的功能都是很强悍的,在此我记录一下我的安装与配置 ...

  4. (二)学习JavaScript之setInterval和clearInterval方法

    参考:http://www.w3school.com.cn/jsref/met_win_setinterval.asp HTML DOM Window 对象 定义和用法 setInterval() 方 ...

  5. NetCat简介与使用方法

    精品学习网考试频道小编应广大考生的需要,特为参加考试的考生策划了“NetCat简介与使用方法”专题等有关资料,供考生参考! 在入侵中它是最经典的工具之一 ,NetCat被所有的网络安全爱好者和研究者称 ...

  6. HDU 1540 Tunnel Warfare 线段树区间合并

    Tunnel Warfare 题意:D代表破坏村庄,R代表修复最后被破坏的那个村庄,Q代表询问包括x在内的最大连续区间是多少 思路:一个节点的最大连续区间由(左儿子的最大的连续区间,右儿子的最大连续区 ...

  7. 卡特兰数 BZOJ3907 网格 NOIP2003 栈

    卡特兰数 卡特兰数2 卡特兰数:主要是求排列组合问题 1:括号化矩阵连乘,问多少种方案 2:走方格,不能过对角线,问多少种方案 3:凸边型,划分成三角形 4:1到n的序列进栈,有多少种出栈方案 NOI ...

  8. empty(trim($str))报错原因

    最近写程序的时候发现一个这样的问题,一个if判断如下: [php] if (!empty(trim($ch_url))) { ... } [/php] 执行程序报出如下错误: [code] Fatal ...

  9. varchar

    mysql varchar(50) 不管中文 还是英文 都是存50个的 MySQL5的文档,其中对varchar字段类型这样描述:varchar(m) 变长字符串.M 表示最大列长度.M的范围是0到6 ...

  10. mysql修改字段的语句写法

    http://www.111cn.net/database/mysql/50678.htm 下面为您介绍的sql语句都是mysql修改字段操作中的一些常用语句,如果您是一个刚刚接触mysql数据库的新 ...