学习是一个逐步发现自己无知的过程!

ngx_http_image_filter_module Nginx 图片裁剪模块

官方文档:

ngx_http_image_filter_module模块 (0.7.54+) 是一个过滤器,可将图像转换为 JPEG、GIF、PNG 和 WebP 格式。

默认情况下不构建此模块,应使用 --with-http_image_filter_module 配置参数启用它。

该模块使用 libgd库。建议使用该库的最新可用版本。

WebP 格式支持出现在 1.11.6 版本中。要以这种格式转换图像,libgd必须使用 WebP 支持编译库。

示例配置

location /img/ {
    proxy_pass   http://backend;
    image_filter resize 150 100;
    image_filter rotate 90;
    error_page   415 = /empty;
}

location = /empty {
    empty_gif;
}

指令

Syntax: image_filter off;
                image_filter test;
                image_filter size;
                image_filter rotate 90 | 180 | 270;
                image_filter resize width height;
                image_filter crop width height;
Default:    image_filter off;
Context:    location

设置对图像执行的转换类型:

  • off 关闭周围位置的模块处理。

  • test 确保响应是 JPEG、GIF、PNG 或 WebP 格式的图像。否则,返回 415(不支持的媒体类型)错误。

  • size 以 JSON 格式输出有关图像的信息,例如:
    "img" : { "width": 3360, "height": 2100, "type": "png" }
    如果出现错误,输出如下:
    { {} }

  • rotate 90| 180|270

    将图像逆时针旋转指定的度数。参数值可以包含变量。此模式可以单独使用,也可以与 resizeandcrop转换一起使用。

  • resize *width* *height*

    按比例将图像缩小到指定尺寸。要仅减少一个维度,可以将另一个维度指定为“ -”。如果发生错误,服务器将返回代码 415(不支持的媒体类型)。参数值可以包含变量。与rotate参数一起使用时,旋转发生归约之后。

  • crop *width* *height*

    按比例将图像缩小到较大的一侧尺寸,并在另一侧裁剪多余的边缘。要仅减少一个维度,可以将另一个维度指定为“ -”。如果发生错误,服务器将返回代码 415(不支持的媒体类型)。参数值可以包含变量。与rotate参数一起使用时,旋转发生缩减之前。

实用规则:

匹配站点下所有

        location ~* \.(JPG|jpg|gif|png|PNG)$ {
                image_filter resize 100 100;
                }

匹配某个目录

        location ~* /image/\.(JPG|jpg|gif|png|PNG)$ {
                image_filter resize 100 100;
                }

通过URL返回值指定大小

当传递图片高度/宽度参数,就进行裁剪。

        location ~* \.(JPG|jpg|gif|png|PNG)$ {
                  image_filter test;
                  set $width -;  # 图片默认宽度
                  set $height -;  # 图片默认高度
                  if ($arg_width != "") {
                      set $width $arg_width;
                        }
                  if ($arg_height != "") {
                      set $height $arg_height;
                        }
                  image_filter resize $width $height;  # 设置图片宽高
                  image_filter_buffer 100M;   # 设置nginx读取图片最大buffer            
             }

常见问题:

在使用nginx的image_filter模块进行截图时,我们有可能会遇到请求都返回415 unsupported media type的错误,原因是 buffer溢出了,image_filter_buffer默认是1M,如果图片较大,进行截图的时候会buffer溢出,因此通过调大buffer即可解决。

        location ~* \.(JPG|jpg|gif|png|PNG)$ {
                image_filter size;
                image_filter resize 100 100;
                image_filter_buffer 100M;
                }
赞(0)
未经允许不得转载:劉大帥 » ngx_http_image_filter_module

你的评论可能会一针见血! 抢沙发

登录

找回密码

注册