-
ngx_http_image_filter_module
支持转换 jpeg、gif、png、webp(1.11.6+)格式的图片。
- 如果nginx是编译源码安装的,默认是不编译image_filter模块的,需要加上
--with-http_image_filter_module
编译参数才行。
- 改模块有赖于libgd库,建议安装最新版本的libgd库
- yum install gd-devel
- apt-get install libgd2-xpm-dev
- 为支持webp格式,libgd库编译时必须加入webp支持。
-
image_filter
用在location
语境中
-
off
默认配置为 image_filter off;
,关闭该模块处理
-
test
确保相应图片格式为JPEG, GIF, PNG, 或 WebP,否则返回415(Unsupported Media Type) 错误
-
size
以json格式输出图片信息:{ "img" : { "width": 100, "height": 100, "type": "gif" } }
,出错时返回{}
-
rotate 90|180|270
图片逆时针选择特定角度,可与resize,crop合用
-
resize $width $length
将图片按比例压缩到指定大小,若只对某个维度进行压缩, 另一个维度可以指定为"-",当与rotate合用时,先resize再rotate
-
crop $width $length
按比例剪切图片到指定大小,若只对某个维度进行压缩, 另一个维度可以指定为"-",当与rotate合用时,先rotate再crop
-
image_filter_buffer $size
设置图片读取的缓存区最大值,当超过缓存区限制时,返回415错误
-
image_filter_interlace on|off
若设置为on,则最后输出的图片是隔行扫描的,如果是jpeg图片,就是progressive JPEG
格式,这样显示图片时,会先显示整个图片的模糊轮廓,随着扫描次数的增加,图片变得越来越清晰,
-
image_filter_jpeg_quality $quality
设置jpeg图片压缩质量,1-100取值,建议最大设置为95,默认值是75
-
image_filter_sharpen $percent
对图片做锐化处理,默认值为0,即不处理
-
image_filter_transparency on|off
是否保持用调色板指定颜色的gif、png图片中的透明度,透明度的损失会使图片质量更好,PNG中Alpha通道的透明度始终保持。
-
image_filter_webp_quality $quality
设置webp图片压缩质量,1-100取值,默认为80
配置实例:
- /X/path/to/imagefile 按制定大小剪切图片
- /path/to/imagefile 默认按1280宽度压缩图片
- Nginx添加图片缓存
cache img server
server {
listen 80;
server_name img.example.com;
add_header X-Cache $upstream_cache_status;
location / {
proxy_pass http://127.0.0.1:10299;
proxy_cache thumbnail_cache;
# proxy_cache_key "$host$document_uri$is_args$arg_key";
proxy_cache_key "$host$document_uri";
proxy_cache_lock on;
proxy_cache_valid 30d; # Cache valid thumbnails for 30 days.
proxy_cache_valid any 15s; # Everything else gets 15s.
proxy_cache_use_stale error timeout invalid_header updating;
proxy_http_version 1.1;
expires 30d;
}
}
image processing server
server {
listen 10299;
server_name 127.0.0.1;
image_filter_jpeg_quality 85;
image_filter_buffer 12M;
image_filter_interlace on;
error_page 404 =404 /empty.gif;
location ~ ^/(?[\d-]+)x(?[\d-]+)/(?.*\.(?[a-z_]*))$ {
alias /var/www/html/static/$path;
image_filter crop $width $height;
}
# location ~ ^/j/(?[^/]+)/(?[\d-]+)x(?[\d-]+)/(?.*\.(?[a-z_]*))$ {
# secure_link $sig; # The hash is stored in the `key` querystring arg.
# secure_link_md5 "/$path my-secret-key";
# if ($secure_link = "") {
# return 404;
# }
# alias /var/www/html/static/$path;
# image_filter crop $width $height;
# }
location / {
root /var/www/html/static/;
image_filter resize 1280 -;
}
}