(转)php 根据url自动生成缩略图并处理高并发问题
图片缩略图动态生成- [代码编程]
2011-08-23
版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明
http://www.blogbus.com/addcn-logs/157496890.html整理下网站缩略图水印图动态生成的方法:
会员上传图片后,调用图片的各地方需要的尺寸不全一样,需要生成大小不同的等比例缩略图。
实现方法是nginx判断,请求的缩略图规则url中,如果图片不存在则调用php程序以原始图片生成对应的缩略图,然后显示出来,并且图片第一次生成后下次直接调用即可。一、基本原则:
只保留原始图片,其它尺寸由原图生成。
缩略图按需生成,大小体现在固定的url。二、图片文件:
原始图路径:/home/htdocs/app/upfiles/house/年/月/日/src_图片名
生成图路径:/home/htdocs/app/upfiles/house/active/年/月/日/图片名_图片生成大小
生成图路径:/home/htdocs/app/upfiles/house/active/年/月/日/图片名_图片生成大小及会员编号
原始图url:
http://p2.uedao.com/house /2011/02/12/src_ 130037359579225801.jpg
缩略图url(不存在则自动生成):
http://p1.uedao.com/house/active /2011/02/12/130037359579225801_128x92 .jpg
水印图url(不存在则自动生成):
http://p1.uedao.com/house/active /2011/02/12/130037359579225801_128x92x1001 .jpg三、nginx配置(nginx.conf)
#p1.uedao.com p2.uedao.com
server {
# listen port
listen 80;
server_name p1.uedao.com p2.uedao.com;
charset utf-8;# root
root /home/htdocs/app/upfiles;
index index.php index.html;# blocked
location ~ .*\.(gif|jpg|png|jpeg|bmp|swf|cur|ico)$ {
valid_referers none blocked *.uedao.com *.facebook.com;
if ($invalid_referer) {
#return 404;
}
location ~* /house/active/(.+)$ {
if (!-f $request_filename) {
proxy_pass http://localhost:8000/app/action/createimg.php?s=$1&$args;
break;
}
}
expires max;
access_log off;
}
}
#注:$1,为location匹配的正则结果;$args, 请求中的参数。四、php程序(createimg.php)
$src = $GET ['s']; //图片路径
if ($src) {
//省略数据验证(如请求来源判断、只响应指定尺寸等)
$src_array = explode ( '/', $src );
$src_array_len = count ( $src_array );
$file_path = $src_array [0] . '/' . $src_array [1] . '/' . $src_array [2] . '/';
$file_name = $src_array [3];
//生成大小
$size_ext_str = strrchr ( trim ( $file_name ), '_' );
$size_str = substr ( str_replace ( strrchr ( $size_ext_str, '.' ), '', $size_ext_str ), 1 );
$size_array = explode ( 'x', $size_str );
$des_file_name = getSourceImgSrc ( $file_path, $file_name ); //会员原始图片
if (! file_exists ( $des_file_name )) {
$width = $size_array [0];
$heigh = $size_array [1];
$src_file_name = getDestImgSrc ( $file_path, $file_name ); //生成目标图片
$obj_image = new Tool_Image ();
if (2 == count ( $size_array )) {
//生成缩略图
$result = $obj_image->make_thumb ( $src_file_name, $width, $heigh, $des_file_name );
} else if (3 == count ( $size_array ) && 0 != intval ( $size_array [2] )) {
//生成水印图
$user_id = $size_array [2];
$water_img = FILE_PATH . 'images/index/public/global/logo.png';
$result = $obj_image->make_watermark ( $src_file_name, $width, $heigh, $des_file_name, $water_img, $user_id );
}
}
loadImgFile ( $des_file_name ); //读取图片并显示
}
//更快的读取图片并显示
function loadImgFile($file_name) {
$fp = fopen ( $file_name, 'r' );
header ( "Content-type:image/jpeg" );
fpassthru ( $fp );
return true;
}
注:生成缩略图后需要程序读取显示出来。五、相关文章
如果你感兴趣阅读到此,下面的文章你可能也想看。
Nginx做动态生成缩略图
http://cnctblog.com/?p=633
Abusing Amazon images
http://aaugh.com/imageabuse.html
基于MongoDB GridFS的图片存储
http://liut.cc/blog/2010/12/about-imsto_my-first-open-source-project.html
(转)php 根据url自动生成缩略图并处理高并发问题的更多相关文章
- [原创]超强C#图片上传,加水印,自动生成缩略图源代码
<%@ Page Language=“C#“ AutoEventWireup=“true“ %> <%@ Import Namespace=“System“ %> <%@ ...
- 帝国cms实现自动生成缩略图和自动分页功能
无论你手工发布,还是采集而来,免不了要进行手工操作弄缩略图,不然标题图片没有,挺烦人的 只需一次设定,就可以在文章编辑框里自动勾选上分页和生成缩略图,免除你次次进行操作的麻烦,好了,废话不多说,上菜“ ...
- Office文件上传自动生成缩略图
来源:微信公众号CodeL 前不久产品经理提出一个X的需求,说上传office文件的时候需要将首页自动截图,用于显示文件列表的时候将文件第一页缩略图展示给用户.实现的方式有多种,这里给大家介绍一个简单 ...
- Office文件上传自动生成缩略图-C#开发
原文: http://www.knowsky.com/898407.html 上传office文件的时候需要将首页自动截图,用于显示文件列表的时候将文件第一页缩略图展示给用户.实现的方式有多种,这里给 ...
- nginx自动生成缩略图
网站上常常一张图片,多个地方需要使用不同的尺寸,一般的方案是上传的时候,根据不同的尺寸用程序生成多张图片. 这么做有两个缺点: 1.如果需要新的尺寸图片的话,只能遍历下数据库,重新生成一次图片. 2. ...
- Android 让系统自动生成缩略图并写入媒体库
MediaStore.Video.Thumbnails.getThumbnail(ContentResolver cr, long origId, int kind, BitmapFactory.Op ...
- 如何安装nginx_lua_module模块,升级nginx,nginx-lua-fastdfs-GraphicsMagick动态生成缩略图,实现图片自动裁剪缩放
如何安装nginx_lua_module模块,升级nginx,nginx-lua-fastdfs-GraphicsMagick动态生成缩略图,实现图片自动裁剪缩放 参考网站:nginx-lua-fas ...
- stark组件开发之自动生成URL
app01\model.py from django.db import models # Create your models here. class Depart(models.Model): i ...
- 织梦dedecms将指定图片自动生成指定尺寸的小图、缩略图、图片的方法
对于普通企业网站来讲,织梦原来的程序只是提供了一个缩略图,但是这样对于一些相对来说图片会比较多的网站来说,图片太大当缩略图会导致网站整体的访问速度,所以我今天就来教你织梦把一张大图转换成生成一张小图或 ...
随机推荐
- xamarin.android 资源图片问题
在xamarin.android 中,关于图片的资源一般都在Resources.drawable下面,在Resources这个文件夹下面,包含了drawable.drawale-hdpi.drawab ...
- Android BroadcastReceiver 注册和反注册
说起来这个问题很简单,只要注册和反注册成对出现就行,好像很多教材都是如此介绍.但实际开发中,对广播注册和反注册的时机把握还是很重要的. 关于广BroadcastReceiver注册和反注册时机,主要有 ...
- python traceback学习(转)
1. Python中的异常栈跟踪 之前在做Java的时候,异常对象默认就包含stacktrace相关的信息,通过异常对象的相关方法printStackTrace()和getStackTrace()等方 ...
- vue-cil 和 webpack 中本地静态图片的路径问题解决方案
1.小于8K的图片将直接以base64的形式内联在代码中,可以减少一次http请求. 2.大于8k的呢?则直接file-loader打包, 这里并没有写明file-loader.但是确实是需要安装,否 ...
- socket连接和TCP连接的关系
我们在数据传输时,能够仅仅使用(传输层)TCP/IP协议,可是那样的话,假设没有应用层.便无法识别数据内容,假设想要使传输的数据有意义.则必须使用到应用层协议,应用层协议有非常多,比方HTTP.FTP ...
- iOS之手势滑动返回功能
iOS中如果不自定义UINavigationBar,通过手势向右滑是可以实现返回的,这时左边的标题文字提示的是上一个ViewController的标题,如果需要把文字改为简约风格,例如弄过箭头返回啥的 ...
- WinForm搭载ScintillaNET时文本由于发生偏移被隐藏解决方案
项目用ScintillaNet搭载到WinForm以满足文本编辑的需求,在用FindReplace.Scintilla.Text=“显示内容”输出文本内容的时候会碰到文本被WinForm边框隐藏的情况 ...
- DisplayPort的时钟隐藏和时钟恢复
转:DisplayPort的时钟隐藏和时钟恢复 无时钟线的视频数据传输是DP协议的一大特点,将时钟信号隐藏在数据中是传输协议的设计趋势.时钟恢复技术也是DP芯片设计的关键技术.在这说一下在发送端时钟是 ...
- LinkedList 基本示例及源码解析
目录 一.JavaDoc 简介 二.LinkedList 继承接口和实现类介绍 三.LinkedList 基本方法介绍 四.LinkedList 基本方法使用 五.LinkedList 内部结构以及基 ...
- 简单手机端头部设置 及css代码
<html> <head> <title>今日报表</title> <meta http-equiv="Content-Type&quo ...