分享是一种精神,与技术高低无关!
 
  • 图片缩略图动态生成- [代码编程]

    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自动生成缩略图并处理高并发问题的更多相关文章

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

    <%@ Page Language=“C#“ AutoEventWireup=“true“ %> <%@ Import Namespace=“System“ %> <%@ ...

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

    无论你手工发布,还是采集而来,免不了要进行手工操作弄缩略图,不然标题图片没有,挺烦人的 只需一次设定,就可以在文章编辑框里自动勾选上分页和生成缩略图,免除你次次进行操作的麻烦,好了,废话不多说,上菜“ ...

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

    来源:微信公众号CodeL 前不久产品经理提出一个X的需求,说上传office文件的时候需要将首页自动截图,用于显示文件列表的时候将文件第一页缩略图展示给用户.实现的方式有多种,这里给大家介绍一个简单 ...

  4. Office文件上传自动生成缩略图-C#开发

    原文: http://www.knowsky.com/898407.html 上传office文件的时候需要将首页自动截图,用于显示文件列表的时候将文件第一页缩略图展示给用户.实现的方式有多种,这里给 ...

  5. nginx自动生成缩略图

    网站上常常一张图片,多个地方需要使用不同的尺寸,一般的方案是上传的时候,根据不同的尺寸用程序生成多张图片. 这么做有两个缺点: 1.如果需要新的尺寸图片的话,只能遍历下数据库,重新生成一次图片. 2. ...

  6. Android 让系统自动生成缩略图并写入媒体库

    MediaStore.Video.Thumbnails.getThumbnail(ContentResolver cr, long origId, int kind, BitmapFactory.Op ...

  7. 如何安装nginx_lua_module模块,升级nginx,nginx-lua-fastdfs-GraphicsMagick动态生成缩略图,实现图片自动裁剪缩放

    如何安装nginx_lua_module模块,升级nginx,nginx-lua-fastdfs-GraphicsMagick动态生成缩略图,实现图片自动裁剪缩放 参考网站:nginx-lua-fas ...

  8. stark组件开发之自动生成URL

    app01\model.py from django.db import models # Create your models here. class Depart(models.Model): i ...

  9. 织梦dedecms将指定图片自动生成指定尺寸的小图、缩略图、图片的方法

    对于普通企业网站来讲,织梦原来的程序只是提供了一个缩略图,但是这样对于一些相对来说图片会比较多的网站来说,图片太大当缩略图会导致网站整体的访问速度,所以我今天就来教你织梦把一张大图转换成生成一张小图或 ...

随机推荐

  1. Beginning Auto Layout Tutorial in iOS 7: Part 4

    A little runtime excursion 为两个button都添加同一个ibaction方法在viewcontroller.m中实现如下的方法:

  2. web.xml文件的 xsd引用(或dtd引用)学习

    1. 为什么web.xml会有不同版本的xsd引用: JDK依赖变化: 或 servlet(JAVA EE)自身API的改变: 2. 为什么会有dtd和xsd两个版本的区别 我是在这篇文章中看到的,作 ...

  3. selinue引起的ssh连接错误

    在客户端执行ssh依然报错: Permission denied (publickey,gssapi-keyex,gssapi-with-mic). 在这个页面不小心看到了原因: http://ser ...

  4. Openfire 4.1.2 DOWNLOADS

    DOWNLOADS  Source Code Openfire 4.1.2 http://www.igniterealtime.org/downloads/ http://download.ignit ...

  5. &和|不等同于&&或||

    &:位与 |:位或 &&:与 ||:或 当C编译器遇到这些符号时,会怎么样了? 当一个&或| 对位进行运算. 当二个&&或||对它进行与或运算. 千万不 ...

  6. ios 视图的旋转及应用

    有时候,需要做出如下图所示的效果,这就需要用到视图的旋转了 1.首先将旋转的值由角度转换为弧度: #define degreesToRadinas(x) (M_PI * (x)/180.0) 注:M_ ...

  7. PHP增加$_ENV变量

    在日常开发过程中,我们常常会将一些系统或模块配写在配置文件里.这样便于程序维护与修改.通常的配置文件有.ini , .xml等.配置文件的好处在于:1,便于管理.2,可读性高.但是,使用配置文件也会有 ...

  8. 编译-O 选项对性能提升作用

    GCC -O 选项 这个选项控制所有的优化等级.使用优化选项会使编译过程耗费更多的时间,并且占用更多的内存,尤其是在提高优化等级的时候. -O设置一共有五种:-O0.-O1.-O2.-O3和-Os. ...

  9. 配置fio支持rbd測试引擎

    fio的rbd測试引擎能够非常方便的对rbd进行測试.以下示范怎样安装fio支持rbd引擎. git clone git://git.kernel.dk/fio.git $ cd fio $ ./co ...

  10. 移动应用开发测试工具Bugtags集成和使用教程【转载】

    前段时间,有很多APP突然走红,最终却都是樱花一现.作为一个创业团队,突然爆红是非常难得的机会.然并卵,由于没有经过充分的测试,再加上用户的激增,APP闪退.服务器数据异常等问题就被暴露出来,用户的流 ...