注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

家居装饰

让每一个人都拥有漂亮的舒服的家!

 
 
 

日志

 
 

转 一个很强的PHP图片处理(含缩图)类  

2008-10-13 17:34:27|  分类: php |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

<?php

/**

 *  基本图片处理,用于完成图片缩入,水印添加

 *  当水印图超过目标图片尺寸时,水印图能自动适应目标图片而缩小

 *  水印图可以设置跟背景的合并度

 *

 *  Copyright(c) 2005 by ustb99. All rights reserved

 *

 *  To contact the author write to {@link mailto:ustb80@163.com}

 *

 *@author偶然

 *@version $Id: thumb.class.php,v 1.9 2006/09/30 09:31:56 zengjian Exp $

 *@packagesystem

 */

 

/**

 * ThumbHandler

 *@accesspublic

 */

 

/*

 使用方法:

    自动裁切:

    程序会按照图片的尺寸从中部裁切最大的正方形,并按目标尺寸进行缩略

 

    $t->setSrcImg("img/test.jpg");

    $t->setCutType(1);//这一句就OK了

    $t->setDstImg("tmp/new_test.jpg");

    $t->createImg(60,60);

 

    手工裁切:

    程序会按照指定的位置从源图上取图

 

    $t->setSrcImg("img/test.jpg");

    $t->setCutType(2);//指明为手工裁切

    $t->setSrcCutPosition(100, 100);// 源图起点坐标

    $t->setRectangleCut(300, 200);// 裁切尺寸

    $t->setDstImg("tmp/new_test.jpg");

    $t->createImg(300,200);

*/

classThumbHandler

{

    var$dst_img;// 目标文件

    var$h_src;// 图片资源句柄

    var$h_dst;// 新图句柄

    var$h_mask;// 水印句柄

    var$img_create_quality=100;// 图片生成质量

    var$img_display_quality=80;// 图片显示质量,默认为75

    var$img_scale=0;// 图片缩放比例

    var$src_w=0;// 原图宽度

    var$src_h=0;// 原图高度

    var$dst_w=0;// 新图总宽度

    var$dst_h=0;// 新图总高度

    var$fill_w;// 填充图形宽

    var$fill_h;// 填充图形高

    var$copy_w;// 拷贝图形宽

    var$copy_h;// 拷贝图形高

    var$src_x=0;// 原图绘制起始横坐标

    var$src_y=0;// 原图绘制起始纵坐标

    var$start_x;// 新图绘制起始横坐标

    var$start_y;// 新图绘制起始纵坐标

    var$mask_word;// 水印文字

    var$mask_img;// 水印图片

    var$mask_pos_x=0;// 水印横坐标

    var$mask_pos_y=0;// 水印纵坐标

    var$mask_offset_x=5;// 水印横向偏移

    var$mask_offset_y=5;// 水印纵向偏移

    var$font_w;// 水印字体宽

    var$font_h;// 水印字体高

    var$mask_w;// 水印宽

    var$mask_h;// 水印高

    var$mask_font_color="#ffffff";// 水印文字颜色

    var$mask_font=2;// 水印字体

    var$font_size;// 尺寸

    var$mask_position=0;// 水印位置

    var$mask_img_pct=50;// 图片合并程度,值越大,合并程序越低

    var$mask_txt_pct=50;// 文字合并程度,值越小,合并程序越低

    var$img_border_size=0;// 图片边框尺寸

    var$img_border_color;// 图片边框颜色

    var$_flip_x=0;// 水平翻转次数

    var$_flip_y=0;// 垂直翻转次数

 

    var$cut_type=0;// 剪切类型

 

 

    var$img_type;// 文件类型

 

    // 文件类型定义,并指出了输出图片的函数

    var$all_type=array(

        "jpg"  =>array("output"=>"imagejpeg"),

        "gif"  =>array("output"=>"imagegif"),

        "png"  =>array("output"=>"imagepng"),

        "wbmp"=>array("output"=>"image2wbmp"),

        "jpeg"=>array("output"=>"imagejpeg"));

 

    /**

     * 构造函数

     */

    functionThumbHandler()

    {

        $this->mask_font_color="#ffffff";

        $this->font=2;

        $this->font_size=12;

    }

 

    /**

     * 取得图片的宽

     */

    functiongetImgWidth($src)

    {

        returnimagesx($src);

    }

 

    /**

     * 取得图片的高

     */

    functiongetImgHeight($src)

    {

        returnimagesy($src);

    }

 

    /**

     * 设置图片生成路径

     *

     *@param   string    $src_img   图片生成路径

     */

    functionsetSrcImg($src_img,$img_type=null)

    {

        if(!file_exists($src_img))

        {

            die("图片不存在");

        }

        

        if(!empty($img_type))

        {

            $this->img_type=$img_type;

        }

        else

        {

            $this->img_type=$this->_getImgType($src_img);

        }

        

        $this->_checkValid($this->img_type);

 

        // file_get_contents函数要求php版本>4.3.0

        $src='';

        if(function_exists("file_get_contents"))

        {

            $src=file_get_contents($src_img);

        }

        else

        {

            $handle=fopen($src_img,"r");

            while(!feof($handle))

            {

                $src.=fgets($fd,4096);

            }

            fclose($handle);

        }

        if(empty($src))

        {

            die("图片源为空");

        }

        $this->h_src= @ImageCreateFromString($src);

        $this->src_w=$this->getImgWidth($this->h_src);

        $this->src_h=$this->getImgHeight($this->h_src);

    }

 

    /**

     * 设置图片生成路径

     *

     *@param   string    $dst_img   图片生成路径

     */

    functionsetDstImg($dst_img)

    {

        $arr  =explode('/',$dst_img);

        $last=array_pop($arr);

        $path=implode('/',$arr);

        $this->_mkdirs($path);

        $this->dst_img=$dst_img;

    }

 

    /**

     * 设置图片的显示质量

     *

     *@param   string      $n    质量

     */

    functionsetImgDisplayQuality($n)

    {

        $this->img_display_quality=(int)$n;

    }

 

    /**

     * 设置图片的生成质量

     *

     *@param   string      $n    质量

     */

    functionsetImgCreateQuality($n)

    {

        $this->img_create_quality=(int)$n;

    }

 

    /**

     * 设置文字水印

     *

     *@param   string     $word    水印文字

     *@param   integer    $font    水印字体

     *@param   string     $color   水印字体颜色

     */

    functionsetMaskWord($word)

    {

        $this->mask_word.=$word;

    }

 

    /**

     * 设置字体颜色

     *

     *@param   string     $color    字体颜色

     */

    functionsetMaskFontColor($color="#ffffff")

    {

        $this->mask_font_color=$color;

    }

 

    /**

     * 设置水印字体

     *

     *@param   string|integer    $font    字体

     */

    functionsetMaskFont($font=2)

    {

        if(!is_numeric($font)&& !file_exists($font))

        {

            die("字体文件不存在");

        }

        $this->font=$font;

    }

 

    /**

     * 设置文字字体大小,仅对truetype字体有效

     */

    functionsetMaskFontSize($size="12")

    {

        $this->font_size=$size;

    }

 

    /**

     * 设置图片水印

     *

     *@param   string    $img     水印图片源

     */

    functionsetMaskImg($img)

    {

        $this->mask_img=$img;

    }

 

    /**

     * 设置水印横向偏移

     *

     *@param   integer     $x    横向偏移量

     */

    functionsetMaskOffsetX($x)

    {

        $this->mask_offset_x=(int)$x;

    }

 

    /**

     * 设置水印纵向偏移

     *

     *@param   integer     $y    纵向偏移量

     */

    functionsetMaskOffsetY($y)

    {

        $this->mask_offset_y=(int)$y;

    }

 

    /**

     * 指定水印位置

     *

     *@param   integer     $position    位置,1:左上,2:左下,3:右上,0/4:右下

     */

    functionsetMaskPosition($position=0)

    {

        $this->mask_position=(int)$position;

    }

 

    /**

     * 设置图片合并程度

     *

     *@param   integer     $n    合并程度

     */

    functionsetMaskImgPct($n)

    {

        $this->mask_img_pct=(int)$n;

    }

 

    /**

     * 设置文字合并程度

     *

     *@param   integer     $n    合并程度

     */

    functionsetMaskTxtPct($n)

    {

        $this->mask_txt_pct=(int)$n;

    }

 

    /**

     * 设置缩略图边框

     *

     *@param   (类型)     (参数名)    (描述)

     */

    functionsetDstImgBorder($size=1,$color="#000000")

    {

        $this->img_border_size  =(int)$size;

        $this->img_border_color=$color;

    }

 

    /**

     * 水平翻转

     */

    functionflipH()

    {

        $this->_flip_x++;

    }

 

    /**

     * 垂直翻转

     */

    functionflipV()

    {

        $this->_flip_y++;

    }

 

    /**

     * 设置剪切类型

     *

     *@param   (类型)     (参数名)    (描述)

     */

    functionsetCutType($type)

    {

        $this->cut_type=(int)$type;

    }

 

    /**

     * 设置图片剪切

     *

     *@param   integer     $width    矩形剪切

     */

    functionsetRectangleCut($width,$height)

    {

        $this->fill_w=(int)$width;

        $this->fill_h=(int)$height;

    }

 

    /**

     * 设置源图剪切起始坐标点

     *

     *@param   (类型)     (参数名)    (描述)

     */

    functionsetSrcCutPosition($x,$y)

    {

        $this->src_x  =(int)$x;

        $this->src_y  =(int)$y;

    }

 

    /**

     * 创建图片,主函数

     *@param   integer    $a     当缺少第二个参数时,此参数将用作百分比,

     *                             否则作为宽度值

     *@param   integer    $b     图片缩放后的高度

     */

    functioncreateImg($a,$b=null)

    {

        $num=func_num_args();

        if(1==$num)

        {

            $r=(int)$a;

            if($r<1)

            {

                die("图片缩放比例不得小于1");

            }

            $this->img_scale=$r;

            $this->_setNewImgSize($r);

        }

 

        if(2==$num)

        {

            $w=(int)$a;

            $h=(int)$b;

            if(0==$w)

            {

                die("目标宽度不能为0");

            }

            if(0==$h)

            {

                die("目标高度不能为0");

            }

            $this->_setNewImgSize($w,$h);

        }

 

        if($this->_flip_x%2!=0)

        {

            $this->_flipH($this->h_src);

        }

 

        if($this->_flip_y%2!=0)

        {

   &

  评论这张
 
阅读(271)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017