"我现在是有些图片需要生成缩略图,这个现在加了image_filter这个已经实现了,但我不知道怎么样才能访问我上传的原图" 刚开始觉得也不太好弄,让他用程序区处理,实际上稍微动脑筋分析一下也可以不修改程序实现动态生成缩略图且能够访问原图。 前提是需要定好图片的访问规则。 先来看一下什么是nginx的image filter模块。
HttpImageFilterModule用来裁剪过大的图片到指定大小,是nginx自带模块,默认不会开启
该模块主要有两个指令: 该指令指定图像的转化形式:
test - 测试回复是否是JPEG、GIF、或PNG图片(不支持BMP等其他格式),出错时返回415。
语法: image_filter_buffer size 该指令设置单图片缓存的最大值,如果过滤的图片大小超过缓存大小,会报错返回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 (责任编辑:IT) |