小知识:在Nginx中配置image filter模块来实现动态生成缩略图

先来看一下什么是nginximage 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目录下

访问缩略图方式

//www.tuohang.net/img/9GUMJR7200AJ0003_90x90.jpg

访问原图方式

//www.tuohang.net/img/9GUMJR7200AJ0003_90x0.jpg

//www.tuohang.net/img/9GUMJR7200AJ0003_0x50.jpg

//www.tuohang.net/img/9GUMJR7200AJ0003_0x0.jpg

//www.tuohang.net/img/9GUMJR7200AJ0003.jpg

添加如下配置到server上下文即可

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
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 {
}

生成缩略图只是image_filter功能中的一个,它一共支持4种参数:

    test:返回是否真的是图片

    size:返回图片长短尺寸

    corp:截取图片的一部分

    resize:缩放图片
?
1
2
3
4
5
location ~ ^/test/(.*)$ {
image_filter size;
root  /var/www/_xxx;
index index.html index.htm;
}

输出信息类似:

?
1
{ “img” : { “width”: 1024, “height”: 537, “type”: “jpeg” } }

是一个JSON,压力测试了一下,还是很给力,500个并发,CPU占用在17%左右。

声明: 猿站网有关资源均来自网络搜集与网友提供,任何涉及商业盈利目的的均不得使用,否则产生的一切后果将由您自己承担! 本平台资源仅供个人学习交流、测试使用 所有内容请在下载后24小时内删除,制止非法恶意传播,不对任何下载或转载者造成的危害负任何法律责任!也请大家支持、购置正版! 。本站一律禁止以任何方式发布或转载任何违法的相关信息访客发现请向站长举报,会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。本网站的资源部分来源于网络,如有侵权烦请发送邮件至:2697268773@qq.com进行处理。
建站知识

小知识:Nginx服务器中414错误和504错误的配置解决方法

2023-5-3 1:32:06

建站知识

小知识:在Nginx服务器中配置针对TCP的负载均衡的方法

2023-5-3 1:50:34

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索