《转》使用nginx和php实时产生缩略图
代码片段(4)[全屏查看所有代码]
1. [代码]Nginx
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
|
#假设,服务器上面有一个文件:abc.jpg,通过http://filefs.domain.com/file/abc.jpg能够访问到原图。其#实一般的,我们在数据库里面也就保存了“/file/abc.jpg”这部分内容。#现在,我们要实现通过http://filefs.domain.com/file/abc.jpg.w320.jpg由服务器自动产生#abc.jpg.w320.jpg(w320,320px的宽度)这个缩略图。并返回图片数据。#要满足以下两个条件:# 1.如果abc.jpg.w320.jpg存在,则不重新产生图片# 2.如果不存在,则在同一次的请求中,返回图片数据,和保存图片文件到服务器。server { listen 80; server_name filefs.domain.com; root /var/www/http/filefs.domain.com; location / { index index.html index.htm; } location ~ \.(png|jpg|jpeg|gif)$ { #如果文件不存在,则rewrite到产生图片的脚本文件autoimg.php if (!-f $request_filename) { rewrite ^/.*$ /autoimg.php; expires max; } #如果文件存在,则设置过期时间,关闭访问日志 if ( -f $request_filename ) { expires max; access_log off; } } error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; } location ~ autoimg.php$ {#安全性考虑,文件服务器,只这个脚本文件的范围提交给php处理 fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /var/www/http/filefs.domain.com$fastcgi_script_name; include /usr/local/nginx/conf/fastcgi_params; }} |
2. [代码]php产生图片文件
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
|
<?php $file = $_SERVER ['REQUEST_URI'];//请求字串 /file/abc.jpg.w320.jpg $desfile = $_SERVER ['DOCUMENT_ROOT'] . $file; //目标目标路径 /var/www/http/file/abc.jpg.w320.jpg $dirname = dirname ( $desfile ) . "/"; $filename = basename ( $desfile ); if (preg_match ( "/([^\.]+\.(png|jpg|jpeg|gif))\.w([\d]+)\.(jpg)/i", $filename, $m )) { $srcfile = $dirname . $m [1]; $width = $m [3]; //匹配出输出文件宽度 if (in_array ( $width, array ( //只产生202和320宽度的文件 202, 320 ) ) && file_exists ( $srcfile )) { //而且文件不存在 thumbnail ( $srcfile, $desfile, $width ); } } /** * 生成缩略图 * * @param 源 $src * @param 缩放后的宽带 $width * */ function thumbnail($src, $des, $width) { ob_start ();//开始截获输出流 $imageinfos = getimagesize ( $src ); $ext = strtolower ( pathinfo ( $src, 4 ) ); if ($imageinfos [2] == 1) { $im = imagecreatefromgif ( $src ); } elseif ($imageinfos [2] == 2) { $im = imagecreatefromjpeg ( $src ); } elseif ($imageinfos [2] == 3) { $im = imagecreatefrompng ( $src ); } if (isset ( $im )) { $height = $imageinfos [1] * $width / $imageinfos [0]; $dst_img = ImageCreateTrueColor ( $width, $height ); imagesavealpha ( $dst_img, true ); $trans_colour = imagecolorallocatealpha ( $dst_img, 0, 0, 0, 127 ); imagefill ( $dst_img, 0, 0, $trans_colour ); imagecopyresampled ( $dst_img, $im, 0, 0, 0, 0, $width, $height, $imageinfos [0], $imageinfos [1] ); header ( 'content-type:image/jpg' ); imagejpeg ( $dst_img, null, 90 );//输出文件流,90--压缩质量,100表示最高质量。 @imagedestroy ( $im ); @imagedestroy ( $dst_img ); } else { echo @file_get_contents ( $src ); } $content = ob_get_contents ();//获取输出流 ob_end_flush ();//输出流到网页,保证第一次请求也有图片数据放回 @file_put_contents ( $des, $content );//保存文件 }?> |
3. [图片] QQ截图20120606104850.png

4. [图片] QQ截图20120606104908.png

开源中国-程序员在线工具:Git代码托管 API文档大全(120+) JS在线编辑演示 二维码 更多»
相关的代码(529)
- 47回/50157阅[PHP] 一个搞笑的php代码哦 4年前 By jemygraw
- 89回/43764阅[PHP] PHP定时执行任务的实现 4年前 By Jewel_M
- 87回/35396阅[PHP] 9行代码太浪费了,5行代码足矣,不用递归实现无限分类数据的树形格式化 2年前 By 童学芬
- 17回/34294阅[PHP] 一个简单PHP采集器 4年前 By 疯狂的流浪
- 5回/28285阅[PHP] php实现文件下载! 4年前 By 兔bug
- 17回/27860阅[PHP] php加密解密 4年前 By 小囧
- 172回/26067阅[PHP] 一句话的代码竟然有这么强的攻击性。对服务器来说是致命的。 3年前 By 童学芬
- 48回/25305阅[PHP] PHP分页类 4年前 By 小囧
- 18回/24031阅[Java] Android访问php取回json数据 5年前 By 红薯
- 32回/23023阅[PHP] php无限分类, 支持输出树状图 5年前 By Midnight
发表评论 回到顶部网友评论(15)
1楼:开源中国首席大爷 发表于 2012-06-06 11:44 回复此评论还好,但是需要修改不少模板文件,也并不算太方便的
2楼:还没有名字 发表于 2012-06-06 12:27 回复此评论比较实用
3楼:SimonXia 发表于 2012-06-06 15:50 回复此评论引用来自“wwwxxxfr”的评论
还好,但是需要修改不少模板文件,也并不算太方便的这最可取的地方是: 1.后台上传的时候,不要预产生一系列的不同大小的图片.预产生的图片,可能90%是没有用处的. 2.更改UI的时候,可以任意产生你需要的大小的图片.比较灵活,不用轮询数据库,将所有图片都压缩一遍.
4楼:pjiaxu.com 发表于 2012-06-09 20:31 回复此评论这个牛X,学习了。
5楼:cevin 发表于 2012-06-17 01:26 回复此评论+1
6楼:HDR 发表于 2012-06-20 16:05 回复此评论引用来自“SimonXia”的评论
引用来自“wwwxxxfr”的评论
还好,但是需要修改不少模板文件,也并不算太方便的这最可取的地方是: 1.后台上传的时候,不要预产生一系列的不同大小的图片.预产生的图片,可能90%是没有用处的. 2.更改UI的时候,可以任意产生你需要的大小的图片.比较灵活,不用轮询数据库,将所有图片都压缩一遍.
这种方法很实用。以前也有过类似的想法,可惜一直没有去做
7楼:廿九 发表于 2012-06-21 10:33 回复此评论支持一下
8楼:童冠 发表于 2012-06-28 12:43 回复此评论
9楼:moqidian 发表于 2012-08-06 16:11 回复此评论好东西
10楼:阿城守候 发表于 2013-01-29 14:23 回复此评论能不能截服务器屏幕的图,效果跟主机屋的VPS一样捏
11楼:蚂蚁浩 发表于 2013-03-20 16:38 回复此评论最好处理服务器和图片的服务器能分开会比较好 ,另外用php处理我总觉得太笨了 呵呵
12楼:wooops 发表于 2013-03-25 00:53 回复此评论引用来自“蚂蚁浩”的评论
最好处理服务器和图片的服务器能分开会比较好 ,另外用php处理我总觉得太笨了 呵呵有什么好办法?
13楼:蚂蚁浩 发表于 2013-03-25 14:26 回复此评论引用来自“wooops”的评论
引用来自“蚂蚁浩”的评论
最好处理服务器和图片的服务器能分开会比较好 ,另外用php处理我总觉得太笨了 呵呵有什么好办法?
前台一个nginx 后台一台nginx 前台遇到缩率图请求 使用proxy转发到后台nginx 用filter 处理, 同时在前台做缓存,这样对后台服务器的要求不会很高. 而且也相当灵活
14楼:oopul 发表于 2013-08-24 11:04 回复此评论Nginx+Nginx Image Thumb Module http://www.oschina.net/p/ngx_image_thumb
15楼:H_Charles 发表于 2014-08-11 17:07 回复此评论好想法
《转》使用nginx和php实时产生缩略图的更多相关文章
- nginx实时生成缩略图到硬盘上
现在随着各终端的出现(手机,ipad等平板),以及各种终端的手机分辨率和尺寸都不同,现在手机用户流量都是宝,网上出现了各种各样的生成缩略图功能的架构,有使用php实时生成缩略图的,也有用nginx + ...
- nginx实现本地图片生成缩略图
nginx可以实现图片的缩略图效果,很多网站为了前端静态资源相应的性能会给大图自动生成一个小图,比如我们经常会在网上看到bd_64x64.png这种格式,淘宝上的小图经常会看到xxx.jpg_100x ...
- 如何安装nginx_lua_module模块,升级nginx,nginx-lua-fastdfs-GraphicsMagick动态生成缩略图,实现图片自动裁剪缩放
如何安装nginx_lua_module模块,升级nginx,nginx-lua-fastdfs-GraphicsMagick动态生成缩略图,实现图片自动裁剪缩放 参考网站:nginx-lua-fas ...
- 转载:通过监控Nginx日志来实时屏蔽高频恶意访问的IP
通过监控Nginx日志来实时屏蔽高频恶意访问的IP 目前在我的VPS上主要通过两种方式来限制ip的访问次数. 通过Nginx的limit_req配置来限制同一ip在一分钟内的访问次数 通过Ngin ...
- fastdfs+nginx+image_filter安装与生成缩略图
fastdfs简介 类似google FS的一个轻量级分布式文件系统,纯C实现,支持linux.FreeBSD等UNIX系统: 只能通过API访问,不支持POXIS: 文件不分块存储,上传的文件和OS ...
- nginx利用image_filter动态生成缩略图
转自:http://www.nginx.cn/2160.html "我如今是有些图片须要生成缩略图.这个如今加了image_filter这个已经实现了.但我不知道怎么样才干訪问我上传的原图& ...
- 使用 ffmpeg nginx rtmp 搭建实时流处理平台
环境: ubuntu 16.04 问题引入: 使用 opencv 获取摄像头数据帧, 进行处理之后(如进行 keypoint 识别), 将 opencv 中图像的 Mat类型转化为 ffmpeg 的 ...
- ffmpeg+nginx截取屏幕实时画面并进行rtmp推流在前端播放
准备环境和文件 1.下载ffmpeg的包[https://foxbaby.lanzoui.com/iYjPmup51cd] 地址:https://ffmpeg.org/download.html#bu ...
- 通过监控Nginx日志来实时屏蔽高频恶意访问的IP
目前在我的VPS上主要通过两种方式来限制ip的访问次数. 通过Nginx的limit_req配置来限制同一ip在一分钟内的访问次数 通过Nginx deny封禁一天内超过指定次数的ip(需要一个监控脚 ...
随机推荐
- 维护一套同时兼容 iOS 6 和 iOS 7,并且能够自动适应两个系统的 UI 风格的代码
举例:ios6:test.pngios7:ios7_test.png在ios7Image.plist中添加 "test" PS:如果要统一成ios7风格,可以看看UI7Kit yo ...
- Scut游戏服务器引擎6.0.5.0发布-支持C#脚本
1. 增加C#脚本支持2. 增加Pay和Sns中间件对Mysql数据库支持3. 精简布署步骤,取消Redis写入程序,将其移到游戏底层运行4. 修正Mysql对中文可能会出现乱码的BUG 点击下载:S ...
- spring Multiple MongoTemplate
<!-- 数据环境配置 --> <mongo:repositories base-package="com.my9yu.manager.module.server.repo ...
- struts2学习笔记2 -struts2的开发步骤和工作原理
struts2的开发步骤: 1.先定义一个能发送请求的页面,可以是链接,也可以是表单(form) 2.开发action类,struts2对action并没有过多的要求,只要求: a 推荐实现actio ...
- 数据结构基础-Hash Table详解(转)
理解Hash 哈希表(hash table)是从一个集合A到另一个集合B的映射(mapping). 映射是一种对应关系,而且集合A的某个元素只能对应集合B中的一个元素.但反过来,集合B中的一个元素可能 ...
- css:清除浮动 overflow
是因为overflow除了(visible)会重新给他里面的元素建立块级格式化(block formatting context)floats, position absolute, inline-b ...
- 总结java编程常用的快捷键
Eclipse 常用快捷键 Eclipse的编辑功能非常强大,掌握了Eclipse快捷键功能,能够大大提高开发效率.Eclipse中有如下一些和编辑相关的快捷键. 1. [ALT+/] 此快捷键为用户 ...
- c#中使用ABCpdf处理PDF,so easy
QQ交流群:276874828 (ABCpdf ) 这几天项目中需要将页面导成PDF,刚开始使用iTextSharp,觉得在分页处理上比较复杂,后来无意中看到了ABCpdf,使用非常简单,并将一些常 ...
- 用buildroot qemu 执行 Android 系统
准备 qemu. 编译 arm 的执行环境 $ wget http://wiki.qemu-project.org/download/qemu-2.0.0.tar.bz2 $ tar xzvf qem ...
- 李振杰:火狐Mozilla被黑事件的启发
火狐浏览器开发商Mozilla近日宣布,因为数据库存在漏洞.Mozilla开发者的数万个电子邮件地址和加密password或遭到黑客窃取. 好多有为青年们往往刚刚获得了一个小成功,便開始沾沾自喜,自命 ...