nginx实现本地图片生成缩略图
nginx可以实现图片的缩略图效果,很多网站为了前端静态资源相应的性能会给大图自动生成一个小图,比如我们经常会在网上看到bd_64x64.png这种格式,淘宝上的小图经常会看到xxx.jpg_100x100xz.jpg这种格式,也是缩略图的应用;接下来在nginx中实现缩略图效果
首先查看nginx在安装时开启了哪些模块,使用 ./nginx -V 可以查看模块开启情况,更准确的说是将安装nginx时编译阶段执行的 ./configure 命令的原样输出,如果编译的时候添加了 --with-http_image_filter_module 那么表示nginx就能直接支持图片缩略图,另外编译之前要提前安装gd-devel这个库,如果没安装可以使用rpm或者yum在线安装的方式 yum -y install gd-devel 进行安装,安装之后再在原有参数上添加上面的参数编译安装nginx即可开启模块
假设我们图片的真实路径是在本地/image_data/xxxx.jpg,下面有很多jpg格式的图片,我们希望通过访问/image_data/xxxx_100x100.jpg这样的请求路径可以生成宽为100,高也为100的小图,并且请求的宽和高是可变的,那么这时候需要在nginx模块中拦截该请求并返回转换后的小图,在对应的server {}段中进行配置,配置如下:
location ~* /image_data/(.*)_(\d+)x(\d+)\.jpg$ {
root /;
set $s $;
set $w $;
set $h $;
image_filter resize $w $h;
image_filter_buffer 10M;
rewrite ^/image_data/(.*)$ /image_data/$s.jpg break;
}
过程就是获取请求参数,然后进行相应缩小,最终重写到对应的文件即可实现;另外上述image_filter_buffer设置图片占用buffer的最大大小,默认为1M,当图片大小大于该配置时,那么就会出现415的错误,所以要修改为合适的大小
修改完上面配置之后,执行 ./nginx -s reload 即可生效,这时访问图片就可以实现小图了
需要注意一点,上面宽和高的设置并不是把图片强制转换成指定长和宽的大小,而是有其中一个变量最大等于设置的大小并且按比例缩小,比如设置为100x100,对于1000x600的图片来说,缩小后是宽最大为100,高最大也是100,并且等比例缩小;假设高为100,那么宽为1000/6 = 166.67 > 100不符合要求,假设宽为100,那么高为600/10 = 60 < 100符合要求,所以最终缩小后的图片应该是100x60的,并且保持比例不变形,这个地方要了解
如果想产生长和宽都是100的正方形图片怎么办呢,现在就在 image_filter resize $w $h; 下面加一行: image_filter crop $w $h; 即可,这个表示对图片裁剪并成比例扩大至相应的长度,即图片内容可能会丢失,但是图片比例仍然不变,所以只加resize还是两个都加要根据具体需要来配置
另外还可以对图片进行旋转,配置如下:
location ~* /image_data/(.*)_(\d+)x(\d+)_(\d+)\.jpg$ {
root /;
set $s $;
set $w $;
set $h $;
set $r $;
image_filter resize $w $h;
image_filter crop $w $h;
image_filter rotate $r;
image_filter_buffer 10M;
rewrite ^/image_data/(.*)$ /image_data/$s.jpg break;
}
上面在图片后面又加了一个参数表示旋转度数,比如/image_data/xxx_100x100_90.jpg就可以把图片逆时针旋转90度,具体是用image_filter rotate来实现的,旋转度数只能是90的整数倍,旋转方向是逆时针,并且只有90,180,270是有效的,其余数字全部是显示正的,如果不旋转一般用0或者360就可以了
以上就是nginx image_filter模块,缩放,裁剪,旋转图片的简单应用
nginx实现本地图片生成缩略图的更多相关文章
- 如何安装nginx_lua_module模块,升级nginx,nginx-lua-fastdfs-GraphicsMagick动态生成缩略图,实现图片自动裁剪缩放
如何安装nginx_lua_module模块,升级nginx,nginx-lua-fastdfs-GraphicsMagick动态生成缩略图,实现图片自动裁剪缩放 参考网站:nginx-lua-fas ...
- phpcms v9图片生成缩略图变成黑色解决方法
今天客户反映,上传的图片生成缩略图有的图片变成黑色,出现问题就百度了一下,有不少网友也遇到这样的问题,但是官方论坛也没有给出解决办法,那还得靠自己解决了,于是就研究phpcms v9 图片压缩代码.打 ...
- java 图片生成缩略图后,转化成流
功能:图片生成缩略图后,转化成流 public class ImageUtils { /** * * @param in1 * 文件流 * @param uploadFileName * 文件名称 * ...
- C# 图片生成缩略图
C# 图片生成缩略图方法: /// <summary> /// 生成缩略图 /// </summary> /// <param name="fileName&q ...
- nginx利用image_filter动态生成缩略图
转自:http://www.nginx.cn/2160.html "我如今是有些图片须要生成缩略图.这个如今加了image_filter这个已经实现了.但我不知道怎么样才干訪问我上传的原图& ...
- fastdfs+nginx+image_filter安装与生成缩略图
fastdfs简介 类似google FS的一个轻量级分布式文件系统,纯C实现,支持linux.FreeBSD等UNIX系统: 只能通过API访问,不支持POXIS: 文件不分块存储,上传的文件和OS ...
- json序列化.xml序列化.图片转base64.base64转图片.生成缩略图.IEnumerable<TResult> Select<TSource, TResult>做数据转换的五种方式
JSON序列化 /// <summary> /// JSON序列化 /// </summary> public static class SPDBJsonConvert { ...
- 毫秒级的时间处理上G的图片(生成缩略图)
测试环境: 测试图片(30M): 测试计时方法: Stopwatch sw1 = new Stopwatch(); sw1.Start(); //TODO...... sw1.Stop(); stri ...
- JAVA实现根据图片生成缩略图、裁剪、压缩图片
依赖(用来复制文件,可以根据自己的来) <dependency> <groupId>commons-io</groupId> <artifactId>c ...
随机推荐
- HttpClient学习整理
HttpClient简介HttpClient 功能介绍 1. 读取网页(HTTP/HTTPS)内容 2.使用POST方式提交数据(httpClient3) 3. 处理页面重定向 ...
- 验证LeetCode Surrounded Regions 包围区域的DFS方法
在LeetCode中的Surrounded Regions 包围区域这道题中,我们发现用DFS方法中的最后一个条件必须是j > 1,如下面的红色字体所示,如果写成j > 0的话无法通过OJ ...
- Good Bye 2016 //智商再次下线,边界爆炸.....
A B很水就略了.. C.又是一次wannafly一样的判断区间的..... 边界设为2000000 正好GG...... fst的时候立马想到上次也是这么wa过的...... 所以下次遇到这种题 ...
- .Net配置中心-Zookeper版
简介 zookeeper的基本概念和作用这里不做介绍,现在很多的公司都在使用它,说起它的作用,可能最先想到的是配置中心,可以将配置项作为一个node存储在zookeeper中,其他应用可以“关注 ...
- 关于select那点事
select: 通过监视多个文件描述符的数组.当select()返回后 文件描述符便会被内核修改标志位,使进程 能进行后续操作 ------------------------------------ ...
- ckeditor+angularjs directive
var cmsPlus = angular.module('cmsPlus', []); cmsPlus.directive('ckEditor', function() { return { req ...
- Spring单例模式与线程安全
问题背景 这段时间在做项目的时候,考虑到Spring中的bean默认是单例模式的,那么当多个线程调用同一个bean的时候就会存在线程安全问题.如果是Spring中bean的创建模式为非单例的,也就不存 ...
- BZOJ3172: [Tjoi2013]单词
传送门 做了这么多题怎么还是无法很好的理解AC自动机呢..果然是个制杖 首先题意表述不是很清晰,这些所有的单词组成了那个文章,所以果断建个AC自动机,建的时候给每个点附加一个权值,建树是经过一次权值即 ...
- 网站建设用的HTTP状态码
在网站建设的实际应用中,容易出现很多小小的失误,就像mysql当初优化不到位,影响整体网站的浏览效果一样,其实,网站的常规http状态码的表现也是一样,Google无法验证网站几种解决办法,提及到由于 ...
- [Unity3d]调试问题之UI/Image不显示
问题描述 在项目中添加的UI/Image资源,在PC和通过Unity Remove测试都没有问题: PC上的效果 手机上Unity Remove测试结果 可真正发布到手机上运行则如下显示,说明imag ...