选择网速最快的镜像: 北京联通 | 美国加州Fremont | 美国宾州Scranton .
美国VPS: 512M/20G/独立IP/仅需$5.95[北京]美国公司 招聘PHP工程师村民红杏要出墙

刚写生成缩略图类,热烈欢迎大家拍砖..[原创]

[php]
<?php
/*-------------------------------------------
* 功 能:生成图片的缩略图
* 时 间:2006-8-10
* 作 者:刀鱼

---------------------------------------------*/
class image
{
        var $src                                 = '';                    //原图片地址
        var $dst                                 = '';                    //目标图片标示
        var $dst_file                         = '';                      //目标图片文件地址
        var $dst_width                         = 0;                    //目标最大宽度
        var $dst_height                 = 0;                    //目标最大高度
        var $mode                                 = 0;                  //是否显示(0显示,1不显示)
        var $exe                        = '';           //配置新的文件名例如源文件名是:mm.jpg 可以将其配置成plmm.jpg/gg_mm.jpg
        function resize_image($src,$dst_width,$dst_height,$exe='',$mode = 0)
        {
                $this->src                        = $src;
                $this->dst_width         = $dst_width;
                $this->dst_height        = $dst_height;
                $this->exe                        = $exe;
                $this->mode                        = $mode;
                $width                                 = $this->get_msg($this->src,0);
                $height                         = $this->get_msg($this->src,1);
                $src_h                             = $this->get_msg($this->src,2);//return:resouse 返回图象标示符
                $size                       = $this->resize($this->src,$this->dst_width,$this->dst_height);
                $this->dst                  = @imagecreatetruecolor($size[x],$size[y]);
                $bool                       = @imagecopyresized($this->dst,$src_h,0,0,0,0,$size[x],$size[y],$width,$height);
                $new_file                   = $this->exe.basename($this->src);
                if($bool)
                {
                        if(isset($mode) && $mode == 0)
                        {
                                        switch ($this->get_msg($src,3))
                                        {
                                        case 1:
                                                return imagegif($this->dst);
                                                break;
                                        case 2:
                                                return imagejpeg($this->dst);
                                                break;
                                        case 3:
                                                return imagepng($this->dst);
                                                break;
                                        }
                        }
                        else
                        {
                                switch ($this->get_msg($src,3))
                                        {
                                        case 1:
                                                return imagegif($this->dst,$new_file);
                                                break;
                                        case 2:
                                                return imagejpeg($this->dst,$new_file);
                                                break;
                                        case 3:
                                                return imagepng($this->dst,$new_file);
                                                break;
                                        }
                        }       
                }
                else
                {
                        echo "拷贝图象并调整大小过程出错啦~";
                }
        }
        /* $src  源图片的地址
         * $fetch 获取类型  0 获取image width 1 获取image height 2 获取image 3获取type
        */
       
        function get_msg($src, $fetch = 0)
        {
                $data = @getimagesize($src);
                switch ($fetch)
                {
                        case 0:
                                $width = $data[0];
                                return $width;
                                break;
                        case 1:
                                $height = $data[1];
                                return $height;
                                break;
                        case 2:
                                switch ($data[2])
                                {
                                        case 1:
                                                $dst = imagecreatefromgif($src);
                                                return $dst;
                                                break;
                                        case 2:
                                                $dst = imagecreatefromjpeg($src);
                                                return $dst;
                                                break;
                                        case 3:
                                                $dst = imagecreatefrompng($src);
                                                return $dst;
                                                break;
                                }
                        case 3:
                                return $data[2];
                                break;
                               
                }
        }
        function resize($src,$dst_width,$dst_height)
        {
                $this->src                         = $src;
                $this->dst_width         = $dst_width;
                $this->dst_height         = $dst_height;
                $width                                 = $this->get_msg($src,0);
                $height                         = $this->get_msg($src,1);
                if($this->dst_width && $width > $this->dst_width )
                {
                        $resize_width         = 1;
                        $width_ratio          = $this->dst_width/$width;
                }
                if($this->dst_height && $height > $this->dst_height)
                {
                        $resize_height         = 1;
                        $height_ratio  = $this->dst_height/$height;
                }
                if($resize_height && $resize_width)
                {
                        //宽度优先
                        if($width_ratio < $height_ratio)
                        {
                                $size[x] = $width * $width_ratio;
                                $size[y] = $height * $width_ratio;
                                return $size;       
                        }
                        //高度优先
                        else
                        {
                                $size[x] = $width * $height_ratio;
                                $size[y] = $height * $height_ratio;
                                return $size;
                        }       
                }
                elseif($resize_height)
                {
                        $size[x] = $width;
                        $size[y] = $height * $height_ratio;
                        return $size;
                }
                elseif($resize_width)
                {
                        $size[x] = $width * $width_ratio;
                        $size[y] = $height;
                        return $size;
                }
        }
}
?>
[/php]

[ 本帖最后由 刀鱼 于 2006-8-14 01:28 PM 编辑 ]
生成缩略图效果怎么样???

刀鱼

刀鱼
中级会员?
初级会员?
  
good8
新手上路?
初级会员?
用 imagecreatetruecolor 不大好,不支持透明GIF



--------
http://www.imagemagick.com.cn/php/magickwand_demo.php

[ 本帖最后由 Mistruster 于 2006-8-21 02:56 PM 编辑 ]
ding,ding,ding....! hehe
不错。学习了。
怎么调用啊?那位高手给补充一下
请教高手如何调用显示
是这样吗
$i=new image ()
$i->resize_image(xxx.gif,400,300,xxxsmall.gif)
$i->get_msg(xxx.gif)
$i->resize(xxx.gif,400,300)