Nginx图片处理原理

这里需要用到 nginx的 http_image_filter_module 模块,这个模块可以很方便的实现图片缩放功能,只是默认的情况下并不会安装,需要自己编译安装才能行。编译的时候./configure 增加 –with-http_image_filter_module 编译安装即可

Nginx图片处理的优缺点

优点

  1. 操作简单。通过简单配置,省去了后端裁剪程序的复杂性。
  2. 实时裁剪。可以实时访问在线裁剪图片。
  3. 灵活性强。后端程序裁剪图片时需要知道裁剪图片的尺寸和质量,使用nginx裁剪可以实时裁剪任意尺寸的图片。
  4. 不占用硬盘空间。

缺点

  1. 消耗CPU和内存,访问量大的时候就会给服务器带来很大的负担。(可以通过使用Nginx缓存和缓存服务器来解决)

  2. 功能不是很强大,支持的处理图片类型只包括JPEG, GIF, PNG, or WebP

Nginx图片处理模块指令使用

image_filter (重要)

设置要在图像上执行的转换类型

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

test

确保响应图片是JPEG、GIF,WEBP或PNG格式,否则返回415错误码。

size

outputs information about images in a JSON format, e.g.:{ "img" : { "width": 100, "height": 100, "type": "gif" } }In case of an error, the output is as follows:{}

以 json 格式返回原图的尺寸和类型

rotate

逆时针旋转指定角度,只能指定这三个角度。参数值可以包含变量,这个模式可以单独使用也可以和resize、crop变换同时使用。

resize width height

按比例对图像进行缩放,可以只指定一个尺寸,另一个尺寸用“-”。如果遇到错误,服务器返回415错误码。参数值可以包含变量。当与rotate参数一同使用时,旋转操作发生在缩放之后。图片会以长的一边为标准,然后等比缩放。

crop width height

按比例裁剪图片,可以只指定一个尺寸,另一个尺寸用“-”。如果遇到错误,服务器返回415错误码。参数值可以包含变量。当与rotate参数一同使用时,旋转操作发生在裁剪之前。图片会以长的一边为标准,然后等比缩放,然后裁剪掉多余的部分。

image_filter_buffer

设置用于读取图像的缓冲区的最大大小

Syntax: image_filter_buffer size;
Default: image_filter_buffer 1M;
Context: http, server, location

设置读取图片的最大缓冲区大小。当超过缓冲区大小时,返回 error 415 (Unsupported Media Type).

image_filter_interlace

如果启用,最终图像将隔行扫描

Syntax: image_filter_interlace on / off;
Default: image_filter_interlace off;
Context: http, server, location

如果开启此功能,最终的图像是交错的。对于JPEG,最终图片是“渐进式JPEG”格式。图片一般是线性加载,设置后则变为交替加载图片。渐进式jpeg效果参见:http://www.zhangxinxu.com/wordpress/2013/01/progressive-jpeg-image-and-so-on/

image_filter_jpeg_quality

设置转换JPEG图像的质量

Syntax: image_filter_jpeg_quality quality;
Default: image_filter_jpeg_quality 75;
Context: http, server, location

设置转为JPEG图像的质量。接受的值从1到100。较小的值意味着低质的图片质量和更少的数据传输量。最大建议的值是95。参数可以包含变量。

image_filter_sharpen

通过设置锐化度,增加最终图像的清晰度。

Syntax: image_filter_sharpen percent;
Default: image_filter_sharpen 0;
Context: http, server, location

增加最终图片的锐度。这个百分比可以超过100。0值禁用此功能。参数可以包含变量。

image_filter_transparency

定义是否透明度时应保留转换GIF图像或PNG图像的调色板中指定的颜色。

Syntax: image_filter_transparency on/off;
Default: image_filter_transparency on;
Context: http, server, location

决定在转换GIF或PNG图片带有调色板定义的颜色时,透明是否会保留。丢失透明度可以是图片得到更好的质量。PNG的Alpha通道的透明总是会保留。

image_filter_webp_quality

设置转化WebP图像所需的质量

Syntax: image_filter_webp_quality quality;
Default: image_filter_webp_quality 80;
Context: http, server, location

设置转为webp图像的质量。

This directive appeared in version 1.11.6.

局限性

  1. Nginx 的图片处理模块,暂时没有看到官方发布的能够给图片加水印功能的模块,在github上看到有人写了些这样的扩展功能,参见 https://github.com/3078825/ngx_image_thumb

  2. Nginx 的实时性和访问的方便性上,GraphicsMagick 是无法比拟的,但是 GraphicsMagick 对图片的处理的功能要比nginx强大很多,比如nginx不能将图片旋转任意角度,不能在图片上加水印,处理图片类型有限等,相对nginx,GraphicsMagick 更适合对图片的异步处理。

参考文献

Module ngx_http_image_filter_module

Nginx的 http_image_filter_module 模块使用说明相关推荐

  1. java centos 缩略图_使用 Nginx 的 image_filter 模块来构建动态缩略图服务器

    原标题:使用 Nginx 的 image_filter 模块来构建动态缩略图服务器 在以前我们实现缩略图机制通常是在当用户上传一张图片后,后端程序会固定将图片生成前端页面需要的不同大小缩略图.不管前端 ...

  2. 1. nginx扩展——ngx_lua 模块简介、安装

    1. 简介 ​ lua-nginx-module(ngx_lua module)把 Lua5.1 的解释器 或 LuaJIT 2.0/2.1 的解释器嵌入到 nginx 中,将强大的 Lua 线程(L ...

  3. Nginx源码研究之nginx限流模块详解

    这篇文章主要介绍了Nginx源码研究之nginx限流模块详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考.一起跟随小编过来看看吧 高并发系统有三把利器:缓存.降级和限流: 限流的目的是通过对并 ...

  4. Nginx安装echo模块

    echo-nginx-module 模块可以在Nginx中用来输出一些信息,可以用来实现简单接口或者排错. 项目地址:https://github.com/openresty/echo-nginx-m ...

  5. 宝塔nginx文件服务器,宝塔面板nginx编译webdav模块 – 建立webdav服务器

    要想Nginx支持WebDAV,需要手动添加http_dav_module和nginx-dav-ext-module模块.http_dav_module模块是nginx默认的模块,但是也需要手动编译. ...

  6. FastDFS的配置、部署与API使用解读(7)Nginx的FastDFS模块(转)

    1.Nginx的FastDFS模块什么作用? 我们在使用FastDFS部署一个分布式文件系统的时候,通过FastDFS的客户端API来进行文件的上传.下载.删除等操作.同时通过 FastDFS的HTT ...

  7. httpd开启status模块_Nginx高并发系列之二——Nginx开启ssl模块

    在上一期中我们安装配置了nginx1.13.7版本并且成功启动,那么这一期就针对安装的Nginx支持ssl模块--即开启https功能.如果还有不知道如何安装与配置的请移至: 水番丘山:Nginx高并 ...

  8. Mac系统安装nginx+rtmp模块

    1.安装命令 ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install) ...

  9. linux第三方模块参数,nginx 的第三方模块ngx_http_accesskey_module 来实现下载文件的防盗链步骤(linux系统下)...

    nginx 的第三方模块ngx_http_accesskey_module 来实现下载文件的防盗链步骤(linux系统下),安装Nginx和HttpAccessKeyModule模块(参考LNMP环境 ...

最新文章

  1. IoT数据分析可能需要混合方法
  2. 开源android豆瓣电影阅读器
  3. python动态语言解释_python是动态语言吗
  4. oracle监听 客户 实例,oracle 数据库实例 监听
  5. NOI.AC#2139-选择【斜率优化dp,树状数组】
  6. <table/>默认适应内容宽度造成滚动条不显示的解决方法
  7. Node.js 多版本安装配置(Window、Ubuntu 、CentOS 、Mac OS、Cloud Studio)
  8. 算法笔记:简单的字符串模式匹配-BF算法
  9. python代码斜率_在Python中准确地测量代码执行时间
  10. java http 面试题_Java面试高级篇—说说TCP,UDP和socket,Http之间联系和区别面试题12期...
  11. 使用Python将数据插入数据库(一)
  12. 软件测试中什么是正交分析法,软件测试用例设计方法之正交分析法
  13. Google Earth Studio黑科技,教你一键制作震撼的地球俯冲航拍等视频素材
  14. Android 最常用的设计模式四 安卓源码分析——模板方法(Mould)
  15. Mockplus组件样式库一键解决风格复用
  16. 基线、底线、顶线、中线
  17. iOS超级签名系统源码及分析
  18. 解决问题:RuntimeError: the sip module implements API v11.0 to v11.2 but the module requires API v12.0
  19. 【UVM基础】CallBack机制快速上手指南
  20. 使用ResNet-50实现图像分类任务

热门文章

  1. JAVA三角形边长定义_Java编译:定义三角形的三条边长a=4,b=8.54,c=4.44;求三角形的周长d...
  2. docker 下载mysql 8.0_docker安装mysql8.0
  3. 神经网络深度(Deepth)的影响
  4. 历史课堂上的经典对白
  5. 使用Python评估Lil John的“拒绝做什么”
  6. 选择排序小程序(c语言)
  7. html 调用idm,如何对IDM进行自定义设置
  8. form窗口上放一个label,如何能找到这个label在哪个文件中使用
  9. 炉石胖枫抽到什么刀片服务器准系统整机主板,中速猎天下第一!老将胖枫喜提炉石传说青岛黄金赛大师组冠军...
  10. ubuntu显示器分辨率不对_Ubuntu安装事宜之一 — 屏幕分辨率问题