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实现本地图片生成缩略图的更多相关文章

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

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

  2. phpcms v9图片生成缩略图变成黑色解决方法

    今天客户反映,上传的图片生成缩略图有的图片变成黑色,出现问题就百度了一下,有不少网友也遇到这样的问题,但是官方论坛也没有给出解决办法,那还得靠自己解决了,于是就研究phpcms v9 图片压缩代码.打 ...

  3. java 图片生成缩略图后,转化成流

    功能:图片生成缩略图后,转化成流 public class ImageUtils { /** * * @param in1 * 文件流 * @param uploadFileName * 文件名称 * ...

  4. C# 图片生成缩略图

    C# 图片生成缩略图方法: /// <summary> /// 生成缩略图 /// </summary> /// <param name="fileName&q ...

  5. nginx利用image_filter动态生成缩略图

    转自:http://www.nginx.cn/2160.html "我如今是有些图片须要生成缩略图.这个如今加了image_filter这个已经实现了.但我不知道怎么样才干訪问我上传的原图& ...

  6. fastdfs+nginx+image_filter安装与生成缩略图

    fastdfs简介 类似google FS的一个轻量级分布式文件系统,纯C实现,支持linux.FreeBSD等UNIX系统: 只能通过API访问,不支持POXIS: 文件不分块存储,上传的文件和OS ...

  7. json序列化.xml序列化.图片转base64.base64转图片.生成缩略图.IEnumerable<TResult> Select<TSource, TResult>做数据转换的五种方式

     JSON序列化 /// <summary> /// JSON序列化 /// </summary> public static class SPDBJsonConvert { ...

  8. 毫秒级的时间处理上G的图片(生成缩略图)

    测试环境: 测试图片(30M): 测试计时方法: Stopwatch sw1 = new Stopwatch(); sw1.Start(); //TODO...... sw1.Stop(); stri ...

  9. JAVA实现根据图片生成缩略图、裁剪、压缩图片

    依赖(用来复制文件,可以根据自己的来) <dependency> <groupId>commons-io</groupId> <artifactId>c ...

随机推荐

  1. HttpClient学习整理

    HttpClient简介HttpClient 功能介绍    1. 读取网页(HTTP/HTTPS)内容    2.使用POST方式提交数据(httpClient3)    3. 处理页面重定向    ...

  2. 验证LeetCode Surrounded Regions 包围区域的DFS方法

    在LeetCode中的Surrounded Regions 包围区域这道题中,我们发现用DFS方法中的最后一个条件必须是j > 1,如下面的红色字体所示,如果写成j > 0的话无法通过OJ ...

  3. Good Bye 2016 //智商再次下线,边界爆炸.....

    A B很水就略了.. C.又是一次wannafly一样的判断区间的.....  边界设为2000000  正好GG...... fst的时候立马想到上次也是这么wa过的...... 所以下次遇到这种题 ...

  4. .Net配置中心-Zookeper版

    简介    zookeeper的基本概念和作用这里不做介绍,现在很多的公司都在使用它,说起它的作用,可能最先想到的是配置中心,可以将配置项作为一个node存储在zookeeper中,其他应用可以“关注 ...

  5. 关于select那点事

    select: 通过监视多个文件描述符的数组.当select()返回后 文件描述符便会被内核修改标志位,使进程 能进行后续操作 ------------------------------------ ...

  6. ckeditor+angularjs directive

    var cmsPlus = angular.module('cmsPlus', []); cmsPlus.directive('ckEditor', function() { return { req ...

  7. Spring单例模式与线程安全

    问题背景 这段时间在做项目的时候,考虑到Spring中的bean默认是单例模式的,那么当多个线程调用同一个bean的时候就会存在线程安全问题.如果是Spring中bean的创建模式为非单例的,也就不存 ...

  8. BZOJ3172: [Tjoi2013]单词

    传送门 做了这么多题怎么还是无法很好的理解AC自动机呢..果然是个制杖 首先题意表述不是很清晰,这些所有的单词组成了那个文章,所以果断建个AC自动机,建的时候给每个点附加一个权值,建树是经过一次权值即 ...

  9. 网站建设用的HTTP状态码

    在网站建设的实际应用中,容易出现很多小小的失误,就像mysql当初优化不到位,影响整体网站的浏览效果一样,其实,网站的常规http状态码的表现也是一样,Google无法验证网站几种解决办法,提及到由于 ...

  10. [Unity3d]调试问题之UI/Image不显示

    问题描述 在项目中添加的UI/Image资源,在PC和通过Unity Remove测试都没有问题: PC上的效果 手机上Unity Remove测试结果 可真正发布到手机上运行则如下显示,说明imag ...