(转)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

时间: 2024-10-11 01:20:55

(转)php 根据url自动生成缩略图并处理高并发问题的相关文章

[原创]超强C#图片上传,加水印,自动生成缩略图源代码

<%@ Page Language=“C#“ AutoEventWireup=“true“ %> <%@ Import Namespace=“System“ %> <%@ Import Namespace=“System.IO“ %> <%@ Import Namespace=“System.Net“ %> <%@ Import NameSpace=“System.Web“ %> <%@ Import NameSpace=“Legalsof

asp.net中使kindeditor自动生成缩略图

kindedtor编辑器,确实很好用,但是也有很多的不足,比如,我们经常用的图片上传功能,首页如果有图片新闻或者需要显示宿略图的时候,你会发现它并没有提供图片上传自动生成缩略图的功能 ,于是,花了一点时间,对它的上传图片的功能进行了改写,废话少说,直接上代码 图片上传功能调用的是:upload_json.ashx  代码如下 复制代码 using System; using System.Collections; using System.Web; using System.IO; using

帝国cms实现自动生成缩略图和自动分页功能

无论你手工发布,还是采集而来,免不了要进行手工操作弄缩略图,不然标题图片没有,挺烦人的 只需一次设定,就可以在文章编辑框里自动勾选上分页和生成缩略图,免除你次次进行操作的麻烦,好了,废话不多说,上菜“ 先到 系统>管理数据表 >   后,在你需要进行设定的类型里更改,比如我要 新闻 这项的实现自动生成标题缩略图和自动分页(当然,你也可以单独实现分页和生成缩略图)          找到 新闻系统数据表  ( phome_ ecms_ news ) >[管理字段]>新闻正文   后面

WordPress使用make_clickable函数让文章网址URL自动生成超链接

在WordPress后台编辑文章的时候,直接粘贴网址到文章内容中,WordPress 并不能自动将网址生成超链接(可点击的链接),如果我们每次都要通过“插入或编辑链接”这个按钮来插入链接,操作有点麻烦.大家应该不知道WordPress 提供了一个名为 make_clickable 的函数,它可以自动将网址转换为可点击的超链接. 使用方法很简单,通过 the_content 钩子挂载 make_clickable  函数即可.具体方式是在主题的 functions.php 中添加下面的代码即可:

Office文件上传自动生成缩略图

前不久产品经理提出一个X的需求,说上传office文件的时候需要将首页自动截图,用于显示文件列表的时候将文件第一页缩略图展示给用户.实现的方式有多种,这里给大家介绍一个简单实用的方案,用起来非常方便. 1.Aspose.Pdf实现将pdf转换为图片功能,获取pdf文件流 通过aspose读取第一页保存为图片 //filestream为pdf文件流 Aspose.Pdf.Document pdfDocument = new Aspose.Pdf.Document(filestream); //sa

nginx自动生成缩略图

网站上常常一张图片,多个地方需要使用不同的尺寸,一般的方案是上传的时候,根据不同的尺寸用程序生成多张图片. 这么做有两个缺点: 1.如果需要新的尺寸图片的话,只能遍历下数据库,重新生成一次图片. 2.图片的尺寸会越来越多,要存的图片也越来越多,仅仅是因为他们的尺寸不同. nginx有个模块,可以处理此内容,http_image_filter_module,可以重新根据定义的大小来压缩后台代理服务器的原始图片,经测试,效果不错. 此模块默认是不安装的,插件名称http_image_filter_m

根据图片URL裁切并生成缩略图

package jtest; import java.awt.Graphics; import java.awt.Image; import java.awt.Toolkit; import java.awt.image.BufferedImage; import java.awt.image.CropImageFilter; import java.awt.image.FilteredImageSource; import java.awt.image.ImageFilter; import

自动生成网页缩略图

http://www.xmlas.com/web-thumbnail-autogenerationcache.html thinkphp与jQuery 自动生成网页缩略图,布布扣,bubuko.com

php获取远程图片url生成缩略图的方法

getimg.php <?php /** * *函数:调整图片尺寸或生成缩略图 *返回:True/False *参数: * $Image 需要调整的图片(含路径) * $Dw=450 调整时最大宽度;缩略图时的绝对宽度 * $Dh=450 调整时最大高度;缩略图时的绝对高度 * $Type=1 1,调整尺寸; 2,生成缩略图 */ $phtypes=array('img/gif', 'img/jpg', 'img/jpeg', 'img/bmp', 'img/pjpeg', 'img/x-png