`
jiasudu1649
  • 浏览: 724626 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Nginx图片缩略图

 
阅读更多
本nginx模块主要功能是对请求的图片进行缩略。

1.环境准备
确认已经安装了libgd2-devel,libpcre-devel,libcurl-devel模块

2.下载nginx的tar.gz文件,并通过tar -zxvf  进行解压缩

3.下载模块源代码(https://github.com/3078825/nginx-image/archive/master.zip
),保存到nginx的源文件目录下(如/usr/local/src/nginx1.2.6)。模块的源代码文件为ngx_image_thumb-master.zip。通过 unzip ngx_image_thumb-master.zip 对模块源码进行解压缩

4.配置nginx的参数 添加图片处理模块
./configure --add-module=ngx_image_thumb-master

5.make & makeinstall 编译安装nginx

6.通过nginx.conf文件 配置图片处理模块
    location / {
            root   html;
            index  index.html index.htm;
            image on;
            image_output on;
            image_water on;
            image_water_type 0;
            image_water_file "/usr/local/nginx/html/vanke.png";
            image_water_pos 0;
            image_water_min 300 300;
            #image_water_text Vanke.com;
            #image_water_font_size 14;
        }

7.配置参数说明
image on/off 是否开启缩略图功能,默认关闭
image_backend on/off 是否开启镜像服务,当开启该功能时,请求目录不存在的图片(判断原图),将自动从镜像服务器地址下载原图
image_backend_server 镜像服务器地址
image_output on/off 是否不生成图片而直接处理后输出 默认off
image_jpeg_quality 75 生成JPEG图片的质量 默认值75
image_water on/off 是否开启水印功能
image_water_type 0/1 水印类型 0:图片水印 1:文字水印
image_water_min 300 300 图片宽度 300 高度 300 的情况才添加水印
image_water_pos 0-9 水印位置 默认值9 0为随机位置,1为顶端居左,2为顶端居中,3为顶端居右,4为中部居左,5为中部居中,6为中部居右,7为底端居左,8为底端居中,9为底端居右
image_water_file 水印文件(jpg/png/gif),绝对路径或者相对路径的水印图片
image_water_transparent 水印透明度,默认20
image_water_text 水印文字 "Power By Vampire"
image_water_font_size 水印大小 默认 5
image_water_font 文字水印字体文件路径
image_water_color 水印文字颜色,默认 #000000

8.调用说明
这里假设你的nginx 访问地址为 http://127.0.0.1/
并在nginx网站根目录存在一个 test.jpg 的图片
通过访问
http://127.0.0.1/test.jpg!c300x200.jpg 将会 生成/输出 test.jpg 300x200 的缩略图
其中 c 是生成图片缩略图的参数, 300 是生成缩略图的宽度, 200 是生成缩略图的高度
一共可以生成四种不同类型的缩略图。
支持 jpeg / png / gif (Gif生成后变成静态图片)
C 参数按请求宽高比例从图片高度 10% 处开始截取图片,然后缩放/放大到指定尺寸( 图片缩略图大小等于请求的宽高 )
M 参数按请求宽高比例居中截图图片,然后缩放/放大到指定尺寸( 图片缩略图大小等于请求的宽高 )
T 参数按请求宽高比例按比例缩放/放大到指定尺寸( 图片缩略图大小可能小于请求的宽高 )
W 参数按请求宽高比例缩放/放大到指定尺寸,空白处填充白色背景颜色( 图片缩略图大小等于请求的宽高

9.调用举例
http://127.0.0.1/test.jpg!c300x300.jpg

http://127.0.0.1/test.jpg!t300x300.jpg

http://127.0.0.1/test.jpg!m300x300.jpg

http://127.0.0.1/test.jpg!w300x300.jpg

http://127.0.0.1/test.c300x300.jpg

http://127.0.0.1/test.t300x300.jpg

http://127.0.0.1/test.m300x300.jpg

http://127.0.0.1/test.w300x300.jpg






1、需要image_filter模块,没有的话重新编译nginx,编译参数加上
--with-http_image_filter_module
2、配置文件1(需要使用缩略图的虚拟主机)
location ^~ /images/ {
autoindex off;
alias /path/to/image/file/;
expires 30d;
location ~ ^/images/thumb(100|150|346)/(.*)\.(jpg|png|gif)$
{
alias /path/to/image/cache/thumb$1/$2.$3;
set $image_uri /images/$2.$3?width=$1&height=$1;
set $image_filename thumb$1/$2.$3;
if (!-f $request_filename) {
proxy_pass http://127.0.0.1/$image_uri;
break;
}
proxy_store /path/to/image/cache/$image_filename;
proxy_store_access user:rw group:rw all:r;
proxy_set_header Host 127.0.0.1;
}
}
3、配置文件2(进行缩略图处理的虚拟主机)
server
{
listen 80;
listen [::]:80;
server_name 127.0.0.1;
charset utf-8;
location ~ ^/images/(.*)\.(jpg|png|gif)$
{
alias /path/to/image/file/$1.$2;
set $img_width $arg_width;
set $img_height $arg_height;
image_filter test;
image_filter resize $img_width -;
image_filter_buffer 1M;
image_filter_jpeg_quality 80;
# image_filter_sharpen 50; 0.7.45无该参数
allow 127.0.0.0/8;
deny all;
}
access_log off;
}
4、本例中限定缩小后的宽度为100、150、346之一。

Nginx + GridFS 实现的缩略图处理机制 « weberliu.com


场景

在 B2C 系统中,由于页面上大量的使用商品的缩略图,因此如何来处理和存储缩略图也就显得尤为重要了。以前在做 Ecshop 的时候出于用户服务器环境的限制,我们是在图片上传的时候来根据系统设置来生成缩略图。这样带来的问题是:用户更换模板以后有可能调整图片的大小,而导致之前生成的缩略图不可用,因此在 Ecshop 中提供了重新生成缩略图的功能。

在新的B2C系统开发之初,我们就对缩略图的生成机制进行了定义,要求是:

缩略图尺寸由模板来决定,也就是通过请求的url地址来生成相应尺寸的缩略图
动态生成缩略图并缓存缩略图,缓存不存在的时候自动重新生成
难点

动态生成缩略图有可能会使 Web 服务器需要同时处理大量的缩略图请求,而导致 CPU 负载过高。即便有CDN缓存、本地文件缓存也不能完全排除这种可能性。
URL 地址的问题,最开始我们考虑采用 图片id_width_height.jpg 这样的形式,但是这么做的风险是,如果有人大量的刷不同宽度和高度的数值就可能会造成撑爆缓存。Amazone 采用的是规则的定义来作为图片路径,这样一定程度的解决了被刷的可能性,但是对于我们来说这种方式也存在一定的问题,因为他的规则中只有大中小等几个规则的定义,并没有具体的宽度和高度,很难适应各种各样的运营经理和产品经理提出来的需求。基于这些考虑,我们最好考虑文件的路径还是采用id_width_height.jpg这种形式的命名,但是给用户看到的地址采用了 TinyURL 的方式来处理,这样既能避免恶意的刷尺寸同时也可以灵活的满足各种需求
方案 1

在最初的解决方案中,我们采用了和手机之家类似的方式来处理:当有缩略图的请求的时候,图片控制器来检查是否存在缓存,如果不存在则生成新的缩略图并写入缓存。

经过了一段时间的运行之后,我们发现这种方式处理的图片在没有CDN的前提下,系统的处理时间相对过长,页面上经常会出现图片一个个的“蹦”出来的情况,效果不是很理想。

方案 2

在一次浏览 Nginx Wiki的时候无意中发现了一个插件:GridFs。下面是关于这个插件的描述:

nginx-gridfs is an Nginx module to serve content directly from MongoDB’s GridFS.

非常的简单,就是允许Nginx直接访问 MongoDB 的 GridFS。这也就触发了我一个新的想法:如果将缩略图的缓存文件放到GridFS中,直接通过 Nginx 来访问是不是能改善现有的状况呢?

于是我做了一个简单的测试:

缓存写入Memcache,PHP 读取Memcache并返回给用户;
直接通过Nginx-GridFS插件读取GridFS中的缓存文件。
在用ab简单的压力测试之后发现效果是惊人的。使用GridFS系统的响应时间是10ms左右,而第一种方式则比第二种相差了10倍左右(具体数字记不太清楚了)。

难点

虽然直接访问 GridFS 的效率是如此的优秀,但是还面临着一个问题,在没有缓存的时候如何来触发缩略图的生成?前面已经提到过系统的要求就是要动态的生成缩略图,因此不可能采用主动缓存的方式。而通过Nginx直接访问GridFS这种方式由于跳过了PHP,我们没有办法来触发缩略图的生成。

这个问题困扰了我好几天。。。。

404

在又一遍仔细阅读Nginx配置参数的时候发现了 error_page 这个参数,他可以将一个错误信息指定到另一个URL。当GridFS中缓存文件不存在的时候 Nginx 同样也是返回一个 404 的错误,而我们可以通过 error_page 将404的错误重新定向到 PHP 处理程序,交给PHP来生成缩略图并缓存到GridFS中,这样整个的流程就完整了:

Nginx配置

要实现这一功能,首先要安装 nginx-gridfs 插件,具体的安装方法还是到官方去看吧:https://github.com/mdirolf/nginx-gridfs。这里就不多说了

其次是要修改vhost里面的server容器,将图片的请求单独进行处理,例如:

  server
  {
    listen          80;
    server_name     statics.*;
    root            /www/statics;

    location  /thumb/
    {  
      gridfs        files root_collection=thumbnail field=filename type=string;
      mongo         192.168.0.11:27017;
      error_page    404 =201 /thumb.php?f=$request_filename;
      expires       30d;
    }
    ... ...
  }
注意 error_page 这一行中的 =201,它的作用是将404的Status Code改变为201,当然您可以写成 =200,我们这里用201的目的是为了通过 HTTP Status Code来判断是否为缓存中读到的文件

转自
http://space.itpub.net/28624388/viewspace-763316
http://lubao515.info/archives/2012/01/64.html
http://zoomq.qiniudn.com/ZQScrapBook/ZqFLOSS/data/20110718145649/
分享到:
评论
2 楼 euii 2013-10-16  
万分感谢,我也在想解决gridfs+nginx缩略图的问题,今天一起在用if(!-e $request_filename)判断,然后用rewrite,你这个办法好。
1 楼 zhoulei984623 2013-08-11  
你好
我们公司也在对OFBIZ进行二次开发,能加一下QQ或者SKYPE进行进一步交流么?
我的
QQ:262238056
SKYPE: zhoulei984623
email: xxshutong@gmail.com

相关推荐

    fastdfs+nginx 分布式存储图片,支持动态缩略图

    本主题将详细介绍如何利用FastDFS和Nginx搭建一个分布式图片存储系统,并实现动态生成缩略图的功能。 首先,我们来看FastDFS。FastDFS设计的主要目标是为互联网应用提供高效的文件存储服务,它将文件存储与文件访问...

    nginx作为http图片服务器示例

    Nginx是一款轻量级的Web服务器,以其高效的并发处理能力、低内存占用以及简单易用的配置而闻名,尤其适合处理静态内容如图片、CSS和JavaScript等。 在描述中提到,“超级性能”是Nginx的一大特点。Nginx采用事件...

    nginx lua处理图片

    3. **Lua脚本编写**:`thumbnail.lua`可能是用来处理图片缩略图的脚本。在Lua中,你可以使用第三方库如`luasocket`进行网络操作,`image`库处理图像数据。例如,脚本可能会读取原始图片,根据请求参数生成不同尺寸的...

    Docker+FastDFS+Nginx+Lua搭建图片服务器,并实现图片缩略图

    Docker+FastDFS+Nginx+Lua实现图片缩略图1、FastDFS安装1.1、镜像下载1.2、开启tracker容器1.3、开启storage容器1.4、测试2、FastDFS集成Nginx+lua2.1、依赖包下载2.2、安装软件基础包2.3、依赖安装2.4、配置Lua脚本...

    Nginx+Lua+GraphicsMagick图片缩略图

    Nginx+Lua+GraphicsMagick实现动态生成指定尺寸的图片

    使用Nginx中自带的模块配置缩略图功能的教程

    http_image_filter_module模块允许用户不需要预先生成图片缩略图文件,而是在图片被请求时动态地调整图片大小。该模块支持以下功能: 1. 测试图片类型:可以测试图片是否为JPEG、GIF或PNG格式,并在不是这些格式时...

    Nginx生成缩略图并存储到硬盘上

    要实现Nginx服务器处理图片缩略图的功能,需要修改nginx的配置文件。主要的配置部分包括: - `location ~* ^/resize`块:用于定义缩略图的生成规则。在该块中,可以根据请求的URI动态设置图片的宽度、高度等参数,...

    批量生成缩略图的php代码

    在IT行业中,尤其是在Web开发领域,批量生成缩略图是一项常见的任务,特别是在处理大量上传的图片资源时。这里,我们关注的焦点是一个使用PHP编写的脚本,它能够在线批量生成图片的缩略图。PHP作为一种广泛使用的...

    缩略图OpenResty(Nginx)+Lua+GraphicsMagick

    在IT行业中,构建高效、可扩展的Web服务是至关重要的,尤其在处理图像资源时,如生成缩略图。OpenResty(Nginx+Lua)结合GraphicsMagick的解决方案,提供了一种强大的方法来实现这个目标。让我们深入探讨这个话题。 ...

    Nginx服务器中用于生成缩略图的模块配置教程

    ngx_image_thumb是nginx中用来生成缩略图的模块,生存缩略图的方法很多,本nginx模块主要功能是对请求的图片进行缩略/水印处理,支持文字水印和图片水印。支持自定义字体,文字大小,水印透明度,水印位置,判断原图...

    Nginx配合php实现生成实时缩略图功能

    在做自动静态化的时候,突然想到...其实,nginx是一个强大的反向代理服务器,通过它的rewrite模块,我们可以实现自动产生缩略图,也不用轮询数据库了。产品设计,要什么尺寸的,客户端直接通过某种规则访问就是了,我

    CentOS下编译安装nginx及配置缩略图插件的方法教程

    首先,我们需要了解yum工具安装nginx虽然方便,但是它不会安装一些特定的插件模块,例如本文提到的http_image_filter_module,这是一个用于生成图片缩略图的模块。为了使用该模块,我们必须从源代码编译安装nginx。 ...

    fast+nginx.zip

    在这个“fast+nginx.zip”压缩包中,包含了在CentOS操作系统上安装和配置这两个组件来创建一个图片缩略图服务的步骤和文件。 首先,我们来看`FastDFS`。FastDFS提供了文件存储、文件同步、负载均衡等功能,特别适合...

    网站三合一缩略图片介绍展示PHP网站源码

    它将三种不同的图片展示功能集成在一起,可能是包括缩略图生成、图片预览以及图片介绍等功能,从而优化用户的浏览体验。该源码的主要特点是其高度可定制性,允许用户根据自己的需求添加广告位,这在网站运营和推广中...

    Nginx_Lua-FastDFS-master.zip

    《Nginx_Lua与FastDFS集成实现图片缩略图服务》 在现代Web应用中,文件存储和高效访问是必不可少的功能,FastDFS作为一个轻量级的分布式文件系统,为解决此类问题提供了优秀的解决方案。而Nginx作为高性能的反向...

    图片处理类,获取图像信息、裁剪 、缩略图、图像的翻转、图像旋转、添加水印、转黑白照片、转黑白两色、转速写效果、获取图片的主题颜色

    本篇文章将详细阐述标题和描述中提到的图片处理知识点,包括获取图像信息、裁剪、缩略图、图像翻转、图像旋转、添加水印、转黑白照片、转黑白两色、转速写效果以及获取图片的主题颜色。 1. 获取图像信息:这通常...

    nginx-lua-GraphicsMagick

    **Nginx-Lua-GraphicsMagick:搭建高效图片处理服务** 在当今互联网时代,图片是网站内容的重要组成部分,无论是社交媒体、电子商务还是个人博客,都需要处理大量的图片。为了提高图片处理效率并减轻服务器负担,...

    Python-Picture是一个基于nginx的图片处理服务

    2. **社交媒体**:用户上传的图片需要实时处理,例如缩略图生成、图片滤镜等。 3. **新闻媒体**:新闻图片的压缩和裁剪,以适应不同设备的显示。 4. **网站和APP**:用于图片的动态生成和个性化定制,提高用户体验。...

Global site tag (gtag.js) - Google Analytics