nginx 生成 缩略图 and 生成缩略图到硬盘

nginx 生成 缩略图 and 生成缩略图到硬盘

nginx  编译的时候增加  ./configure --with-http_image_filter_module 

配置如下

server

{

  listen     80;

  server_name 192.168.0.156;

  index index.html index.htm index.php;

  root /opt/htdocs;

  access_log /opt/local/nginx/logs/access.log main;

  location ~* (.*)/(d+).(jpg|png|gif)$

   {

    set $h $arg_h;

    set $w $arg_w;

     #image_filter crop $h $w;

      image_filter resize $h $w;

    }

  location ~* /(d+)_(d+)x(d+).(jpg|png|gif)$

     {

   if ( -e $document_root/$1.$4 )

   {

   rewrite /(d+)_(d+)x(d+).(jpg|png|gif)$ /$1.$4?h=$2&w=$3 last;

    }

   return 404;

  }

}

缩略图使用.. 图片保存在 /opt/htdocs/upload/ 目录下面.. 如 0.jpg

原图访问 http://192.168.0.156/upload/0.jpg

缩略100x100 访问  http://192.168.0.156/upload/0_100x100.jpg

缩略300x300 访问  http://192.168.0.156/upload/0_300x300.jpg

如果原图不存在  将会返回 404 !!

生成缩略图到本地硬盘中

server

{

  listen     80;

  server_name 192.168.0.156;

  index index.html index.htm index.php;

  root /opt/htdocs;

  access_log /opt/local/nginx/logs/www.xxx.com.log main;

  

  location ~* ^/resize

    {

  set $width  100;

  set $height 100;

  set $dimens "";

  if ($uri ~* "^/resize_(d+)x(d+)/(.*)" ) 

    {

   set $width $1;

   set $height $2;

   set $image_path $3;

   set $demins "_$1x$2";

  }

   if ($uri ~* "^/resize/(.*)" ) 

    {

   set $image_path $1;

    }

   set $image_uri image_resize/$image_path?width=$width&height=$height;

   if (!-f $request_filename) {

   proxy_pass http://192.168.0.156/$image_uri;

   break;

    }

   proxy_store /opt/htdocs/upload/resize$demins/$image_path;

   proxy_store_access user:rw group:rw all:r;

   proxy_set_header Host $host;

   expires      30d;

   access_log off;

  }

   location /image_resize {

   alias /opt/htdocs/;

   image_filter resize $arg_width $arg_height;

   image_filter_jpeg_quality 75;

   access_log off;

 }

}

缩略图使用.. 图片保存在 /opt/htdocs/upload/ 目录下面.. 如 0.jpg

原图访问 http://192.168.0.156/upload/0.jpg

访问 http://192.168.0.56/resize/upload/0.jpg   

  location ~* ^/resize

    {

  set $width  100;

  set $height 100;

  set $dimens "";

缩略为定义的 100 x 100

当缩略图存在时间

访问  http://192.168.0.156/resize_100x100/upload/0.jpg

  if ($uri ~* "^/resize_(d+)x(d+)/(.*)" ) 

    {

   set $width $1;

   set $height $2;

   set $image_path $3;

   set $demins "_$1x$2";

  }

   if ($uri ~* "^/resize/(.*)" ) 

    {

   set $image_path $1;

    }

缩略为 resize_$width x $height    缩略定义大小

当缩略图不存在时,使用直接缩略 图片质量为 75% 

   set $image_uri image_resize/$image_path?width=$width&height=$height;

   

   location /image_resize {

   alias /opt/htdocs/;

   image_filter resize $arg_width $arg_height;

   image_filter_jpeg_quality 75;

   access_log off;

  

访问  http://192.168.0.156/image_resize/upload/0.jpg?width=100&height=100

并利用 Nginx proxy_store 缓存缩略的图片到本地

   if (!-f $request_filename) {

   proxy_pass http://192.168.0.156/$image_uri;

   break;

    }

   proxy_store /opt/htdocs/upload/resize$demins/$image_path;

   proxy_store_access user:rw group:rw all:r;

   proxy_set_header Host $host;

   expires      30d;

   access_log off;

  }

访问  http://192.168.0.156/resize_100x100/upload/0.jpg

生成图片的路径为 /opt/htdocs/upload/resize_100x100/upload/0.jpg