• 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 $1;
                set $w $2;
                set $h $3;
                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 $1;
                set $w $2;
                set $h $3;
                set $r $4;
                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模块,缩放,裁剪,旋转图片的简单应用

  • 相关阅读:
    openerp学习笔记 调用工作流
    openerp学习笔记 自定义小数精度(小数位数)
    openerp学习笔记 跟踪状态,记录日志,发送消息
    openerp学习笔记 计算字段、关联字段(7.0中非计算字段、关联字段只读时无法修改保存的问题暂未解决)
    openerp学习笔记 tree视图增加复选处理按钮
    openerp学习笔记 统计、分析、报表(过滤条件向导、分组报表、图形分析、比率计算、追加视图排序)
    openerp学习笔记 视图样式(表格行颜色、按钮,字段只读、隐藏,按钮状态、类型、图标、权限,group边距,聚合[合计、平均],样式)
    openerp学习笔记 计划动作、计划执行(维护计划)
    银行前置以及银行核心系统
    什么是报文
  • 原文地址:https://www.cnblogs.com/freeweb/p/5764493.html
Copyright © 2020-2023  润新知