Nginx图片处理

TrumanWong
6/24/2024
TrumanWong

Nginx图片处理需要用到ngx_http_image_filter_module模块(0.7.54+),该模块可以对JPEGGIFPNGWebP格式的图片文件进行动态旋转、比例缩放及裁剪。

ngx_http_image_filter_module模块不是默认构建的,需要通过 --with-http_image_filter_module 配置参数启用。此模块使用libgd库。建议使用该库的最新版本。WebP 格式支持出现在 1.11.6 版本中。要转换这种格式的图像,libgd库必须在编译时包含 WebP 支持。

image_filter

image_filter用于设置对图像执行的转换类型。

语法:

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;

默认值:image_filter off;

作用域:location

参数值说明:

参数名参数值选项参数说明
off关闭图片处理功能
test确保响应是 JPEGGIFPNGWebP 格式的图像。否则,将返回 415状态码(不支持的媒体类型)。
sizeJSON 格式输出有关图像的信息,例如:{ "img" : { "width": 100, "height": 100, "type": "gif" } };如果发生错误,输出如下:{}
rotate90|180|270按指定度数逆时针旋转图像。参数值可以包含变量。此模式可以单独使用,也可以与 resizecrop一起使用。
resizewidth height以最小边按比例将图片缩放到指定大小,保持图片比例。参数值可以包含变量,如果发生错误,将返回415状态码。rotate参数一起使用时,旋转发生在resize之后
cropwidth height以最大边按比例缩放后以最小边进行裁剪,不保持图片比例。参数值可以包含变量,如果发生错误,将返回415状态码。rotate参数一起使用时,旋转发生在crop之前

示例配置:

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

location = /empty {
    empty_gif;
}

image_filter_buffer

设置图片处理缓冲区的大小,超过设定值时将返回错误状态码415

语法:image_filter_buffer size;

默认值:image_filter_buffer 1M;

作用域:httpserverlocation

image_filter_interlace

图片交错加载指令,将图片转换为交错格式输出。对于JPEG图片将转换为渐进式格式。

语法:image_filer_interlace on|off;

默认值:image_filer_interlace off;

作用域:httpserverlocation

image_filter_jpeg_quality

设置转换后的JPEG图像的期望质量,值范围为1~100。较小的值通常意味着较低的图像质量和较少的数据传输。建议的最大值为95。参数值可以包含变量。

语法:image_filter_jpeg quality;

默认值:image_filter_jpeg_quality 75;

作用域:httpserverlocation

image_filter_shapen

图片锐化指令,设置是否对图片进行锐化处理,指令值可以超过100,0表示禁用锐化。参数值可以包含变量。

语法:image_filter_sharpen percent;

默认值:image_filter_sharpen 0;

作用域:httpserverlocation

image_filter_transparency

图片背景指令,设置对GIF或者PNG图片进行处理时是否应保留透明度,透明度的丧失可使图像质量更好。PNG 中的 alpha 通道透明度始终保留。

语法:image_filter_transparency on|off;

默认值:image_filter_transparency on;

作用域:httpserverlocation

image_filter_webp_quality

WebP图片质量指令,设置转换后的WebP图像的期望质量。值范围为1~100。较小的值通常意味着较低的图像质量和较少的数据传输。参数值可以包含变量。

语法:image_filter_webp_quality quality;

默认值:image_filter_webp_quality 80;

作用域:httpserverlocation

示例配置

location ~* \.(jpg|jpeg|png|gif|webp)$ {
  image_filter_buffer 20M;
  image_filter_interlace on;
  image_filter resize $arg_width $arg_height;
  image_filter_jpeg_quality 90;
  expires      30d;
}