Nginx/Apache图片缩略图技术
1,目的
为了节省用户下载图片的流量,我们可以在适当的地方使用图片缩略图技术。
2,使用方式
原始图片url
http://xx.xx.xx.xx/xx/xx/abc.jpg
缩略图片url
http://xx.xx.xx.xx/xx/xx/abc.jpg!wxh[.jpg|.png]
最后面的.png|.jpg可选
如果希望width/height按比例缩放,设置为 -
1),限制图片返回的宽度最大为200
http://xx.xx.xx.xx/xx/xx/abc.jpg!200x-
2),限制图片返回的高度最大为200
http://xx.xx.xx.xx/xx/xx/abc.jpg!-x200
3),限制图片返回宽度不超过200,高度不超过300
http://xx.xx.xx.xx/xx/xx/abc.jpg!200x300
3,Nginx + Linux 缩略图实现
3.1,原理
利用nginx image filter模块实时压缩图片
1),当访问的缩略图不存在,则根据原始图片实时生成对应尺寸的缩略图片,并把缩略图保存到磁盘。(图片缩放时会消耗部分CPU计算)
2),如果缩略图已经存在,则直接返回磁盘上的缩略图。
特点:支持缩略图写磁盘,不支持水印。
依赖于gd:
# yum install -y gd-devel
3.2,nginx配置实现
location ~ ^/Mobile/jiefang/* { root /home/wwwroot/ftp; set $width "-"; set $height "-"; if ( $uri ~ "/(.{1,}\..+)!([\d|-]+)x([\d|-]+).*" ) { set $width $2; set $height $3; set $image_path $1; } set $image_uri thumb_image/$image_path?width=$width&height=$height; if (!-f $request_filename) { proxy_pass http://127.0.0.1/$image_uri; break; } proxy_store on; #/home/wwwroot/ftp/$request_filename; #on表示压缩后的文件保存在与源图片相同目录下。 proxy_store_access user:rw group:rw all:r; #proxy_temp_path /tmp/images; proxy_set_header Host $host; proxy_set_header Content-Type image/jpeg;}location /thumb_image { alias /home/wwwroot/ftp; image_filter resize $arg_width $arg_height; image_filter_jpeg_quality 75; # 压缩质量 #image_filter_buffer 2m; # 如果原始图片大小起过1m,则会报415错误 if ( $request_filename ~ "/home/wwwroot/ftp/(.*)" ) { error_page 415 = http://$host/$1; # 如果出错,则使用原始图片 } allow 127.0.0.0/8; deny all;} |
3.3,例子
例子:
http://192.168.85.197/Mobile/jiefang/server/prod/upload/01.jpg 原图: 805k
http://192.168.85.197/Mobile/jiefang/server/prod/upload/01.jpg!200x- 17k
http://192.168.85.197/Mobile/jiefang/server/prod/upload/02.png 原图: 698k
http://192.168.85.197/Mobile/jiefang/server/prod/upload/02.png!200x200 79k
http://192.168.85.197/Mobile/jiefang/server/prod/upload/03.jpg 原图: 300k
http://192.168.85.197/Mobile/jiefang/server/prod/upload/03.jpg!300x- 15k
4,Apache + Windows缩略图实现
4.1,环境
Windows + Apache + PHP + ImageMagick
ImageMagick是一款免费+多平台+性能强劲的图片处理库,处理图片时占用内存低,图片清晰效果好。
4.2,原理
同上3.1,但支持水印
4.3,Apache配置
LoadModule rewrite_module modules/mod_rewrite.so #开户Apache重写规则模块LoadModule fcgid_module modules/mod_fcgid.so #使用fastcgi代理PHP请求<IfModule mod_fcgid.c> #配置php环境 AddHandler fcgid-script .fcgi .php FcgidInitialEnv PHPRC "d:/software/php-5.2.17" FcgidInitialEnv PHP_FCGI_MAX_REQUESTS 1000 FcgidMaxRequestsPerProcess 1000 FcgidMaxProcesses 5 FcgidIOTimeout 120 FcgidIdleTimeout 120 FcgidWrapper "d:/software/php-5.2.17/php-cgi.exe" .php AddType application/x-httpd-php .php</IfModule>RewriteEngine onRewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME} !-fRewriteRule ^/Mobile/(.+\.(jpg|jpeg|png)![-|\d]+x[-|\d]+).*$ /php/resize.php?file=$1 [L] #如果client请求图片并且要求对图片缩放,则将请求及参数重写至resize.php |
4.4,PHP配置
extension=php_imagick.dll #加载ImageMagick图片处理模块 |
4.5,resize.php
$w = preg_match('/^\d+$/i', $w) ? intval($w) : 0;$h = preg_match('/^\d+$/i', $h) ? intval($h) : 0;if (file_exists($path) == false){ // 如果缩略图不存在,则创建它 $image = new Imagick($srcPath); $len = $image->getImageSize(); if($len < 1024 * 50){ // 如果原图小于50k,则不缩放 $path = $srcPath; } else{ $real_w = $image->getImageWidth(); $real_h = $image->getImageHeight(); // 以下4行代码可以提升性能 $image->setImageCompression(Imagick::COMPRESSION_JPEG); $image->setImageCompressionQuality(75); // 设置图片质量 $image->stripImage(); $image->setImageFormat('JPEG'); $image->thumbnailImage($w, $h); $image->writeImages($path, true); } $image->clear(); $image->destroy();}echo file_get_contents($path); |
4.6,例子
我的机器
http://192.168.85.197/Mobile/server/upload/test1.jpg 原图:563k
http://192.168.85.197/Mobile/server/upload/test1.jpg!100x- 8.9k
http://192.168.85.197/Mobile/server/upload/test3.jpg 原图:779k
http://192.168.85.197/Mobile/server/upload/test3.jpg!100x- 8.3k
http://192.168.85.197/Mobile/server/upload/test4.jpg 原图:3.9k
http://192.168.85.197/Mobile/server/upload/test4.jpg!100x- 3.9k (图片小于50k时未缩放,返回原图)
http://192.168.85.197/Mobile/server/upload/test5.png 原图:8.73M
http://192.168.85.197/Mobile/server/upload/test5.png!200x- 8.7k
5,参考资料
Nginx/Apache图片缩略图技术的更多相关文章
- NodeJs + gm图片缩略图
我的另一篇文章: Nginx/Apache图片缩略图技术 gm官网 1, 软件环境 nodejs npm GraphicsMagick or ImageMagick 貌似ImageMagick在处理大 ...
- Nginx Image Module图片缩略图 水印处理模块
Nginx Image Module图片缩略图 水印处理模块 下载Tengine tar -zxvf tengine-1.4.5.tar.gz cd tengine-1.4.5 下载Nginx tar ...
- [转帖]Nginx Image Module图片缩略图 水印处理模块
Nginx Image Module图片缩略图 水印处理模块 https://www.cnblogs.com/jicki/p/5546972.html Nginx Image Module图片缩略图 ...
- Nginx 搭建图片服务器
Nginx 搭建图片服务器 本章内容通过Nginx 和 FTP 搭建图片服务器.在学习本章内容前,请确保您的Linux 系统已经安装了Nginx和Vsftpd. Nginx 安装:http://www ...
- 【Nginx】面试官竟然问我Nginx如何生成缩略图,还好我看了这篇文章!!
写在前面 今天想写一篇使用Nginx如何生成缩略图的文章,想了半天题目也没想好,这个题目还是一名读者帮我起的.起因就是这位读者最近出去面试,面试官正好问了一个Nginx如何生成缩略图的问题.还别说,就 ...
- Nginx,Nginx 搭建图片服务器
Nginx Nginx 概述 反向代理 工作流程 优点 1:保护了真实的web服务器,保证了web服务器的资源安全 2:节约了有限的IP地址资源 3:减少WEB服务器压力,提高响应速度 4:其他优点 ...
- Nginx 笔记与总结(15)nginx 实现反向代理 ( nginx + apache 动静分离)
在 nginx 中,proxy 用来实现反向代理,upstream 用来实现负载均衡. 例如有两台服务器,nginx 服务器作为代理服务器,执行 .html 文件,apache 服务器上执行 .php ...
- 转:Nginx+Apache环境的安装与配置
转:http://www.server110.com/nginx/201404/8817.html 我们依然尽可能采用yum来安装我们需要的软件,由系统官方维护的软件,其安全性和稳定性都值得信赖,并且 ...
- nginx配置图片服务器
这几天研究了一下nginx配置图片服务器的相关内容,个人的一些收获与大家分享一下: Nginx是目前非常流行的web服务器,它起源于俄罗斯.它具有处理速度快,并发量大,占用资源极低等优点,尤其对于静态 ...
随机推荐
- VC2008下CRichEditView加载RichEdit4.1版本(还有一些类似的文章)
在之前的文章<RichEdit 各个版本介绍>中,写到RichEdit已经到达6.0版本了,而我们经常编程使用的却还是2.0,在vc6.0中甚至还使用1.0版本,更高的版本修复了 ...
- Android 常用UI控件之TabHost(2)简单示例
1,布局 <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tool ...
- Android开发UI之个性化控件之Menu
MenuDrawer 滑出式菜单,通过拖动屏幕边缘滑出菜单,支持屏幕上下左右划出,支持当前View处于上下层,支持Windows边缘.ListView边缘.ViewPager变化划出菜单等. 项目地址 ...
- hdu4323Magic Number(dp)
http://acm.hdu.edu.cn/showproblem.php?pid=4323 去年的多校 编辑距离的变形 暴力居然过了 还想了好久别的方法,想得很头疼 #include <ios ...
- hadoop2.2基准测试
<hadoop the definitive way>(third version)中的Benchmarking a Hadoop Cluster Test Cases的class在新的版 ...
- java集合类——Stack类
查看java的API文档,Stack继承Vector类. 栈的特点是后进先出. API中Stack自身的方法不多,基本跟栈的特点有关. import java.util.Stack; public c ...
- VMWare12 安装 OSX 10.10
推荐电脑配置 1:Inter I5及以上 (A卡请自行百度大神解决方案) 必须开启CPU虚拟化:开机进入 BIOS ---> Intel Virtualization Technology--- ...
- cgi ISAP sapi等
1.CGI和FastCGI是apache处理php脚本的其中两种工作模式,还有ISAPI,SAPI等 2.而php-fpm并不是一种工作模式,而是一个PHP在FastCGI模式运行下的进程管理器,全称 ...
- 【转】iTunes下载速度太慢?两招帮你提速!-- 不错
原文网址:http://bbs.app111.com/thread-275-1-1.html 不用说,很多朋友都发现在大陆,下载 iTunes 上的东西实在是慢如蜗牛,小一点的软件还能坚持一下,大一点 ...
- 【转】git使用教程
Git使用教程 一:Git是什么? Git是目前世界上最先进的分布式版本控制系统. 二:SVN与Git的最主要的区别? SVN是集中式版本控制系统,版本库是集中放在中央服务器的,而干活的时候,用的都是 ...