首页 > php图像处理 > PHP智能把图片生成缩略图类

PHP智能把图片生成缩略图类

一个PHP智能把图片生成缩略图类,可自动根据你图片的大小生成等比例的图片,PHP智能把图片生成缩略图类代码如下:

<?php
/***************************************  *作者:落梦天蝎(beluckly)
 *类名:CreatMiniature  
 *功能:生成多种类型的缩略图  
 *基本参数:$srcFile,$echoType  
 *方法用到的参数:  
                 $toFile,生成的文件  
                 $toW,生成的宽  
                 $toH,生成的高  
                 $bk1,背景颜色参数 以255为最高  
                 $bk2,背景颜色参数  
                 $bk3,背景颜色参数  
    
 *例子:  
    
     include("thumb.php");  
     $cm=new CreatMiniature();  
     $cm->SetVar("1.jpg","file");  
     $cm->Distortion("dis_bei.jpg",150,200);  
     $cm->Prorate("pro_bei.jpg",150,200);  
     $cm->Cut("cut_bei.jpg",150,200);  
      $cm->BackFill("fill_bei.jpg",150,200);  
    
 ***************************************/
class CreatMiniature {
    //公共变量
    var $srcFile = ""; //原图
    var $echoType; //输出图片类型,link--不保存为文件;file--保存为文件
    var $im = ""; //临时变量
    var $srcW = ""; //原图宽
    var $srcH = ""; //原图高
    //设置变量及初始化
    function SetVar($srcFile, $echoType) {
        $this->srcFile = $srcFile;
        $this->echoType = $echoType;
        $info = "";
        $data = GetImageSize($this->srcFile, $info);
        switch ($data[2]) {
            case 1:
                if (!function_exists("imagecreatefromgif")) {
                    echo "你的GD库不能使用GIF格式的图片,请使用Jpeg或PNG格式!<a href='javascript:go(-1);'>返回</a>";
                    exit();
                }
                $this->im = ImageCreateFromGIF($this->srcFile);
                break;
            case 2:
                if (!function_exists("imagecreatefromjpeg")) {
                    echo "你的GD库不能使用jpeg格式的图片,请使用其它格式的图片!<a href='javascript:go(-1);'>返回</a>";
                    exit();
                }
                $this->im = ImageCreateFromJpeg($this->srcFile);
                break;
            case 3:
                $this->im = ImageCreateFromPNG($this->srcFile);
                break;
        }
        $this->srcW = ImageSX($this->im);
        $this->srcH = ImageSY($this->im);
    }
    //生成扭曲型缩图
    function Distortion($toFile, $toW, $toH) {
        $cImg = $this->CreatImage($this->im, $toW, $toH, 0, 0, 0, 0, $this->srcW, $this->srcH);
        return $this->EchoImage($cImg, $toFile);
        ImageDestroy($cImg);
    }
    //生成按比例缩放的缩图
    function Prorate($toFile, $toW, $toH) {
        $toWH = $toW / $toH;
        $srcWH = $this->srcW / $this->srcH;
        if ($toWH < = $srcWH) {
            $ftoW = $toW;
            $ftoH = $ftoW * ($this->srcH / $this->srcW);
        } else {
            $ftoH = $toH;
            $ftoW = $ftoH * ($this->srcW / $this->srcH);
        }
        if ($this->srcW > $toW || $this->srcH > $toH) {
            $cImg = $this->CreatImage($this->im, $ftoW, $ftoH, 0, 0, 0, 0, $this->srcW, $this->srcH);
            return $this->EchoImage($cImg, $toFile);
            ImageDestroy($cImg);
        } else {
            $cImg = $this->CreatImage($this->im, $this->srcW, $this->srcH, 0, 0, 0, 0, $this->srcW, $this->srcH);
            return $this->EchoImage($cImg, $toFile);
            ImageDestroy($cImg);
        }
    }
    //生成最小裁剪后的缩图
    function Cut($toFile, $toW, $toH) {
        $toWH = $toW / $toH;
        $srcWH = $this->srcW / $this->srcH;
        if ($toWH < = $srcWH) {
            $ctoH = $toH;
            $ctoW = $ctoH * ($this->srcW / $this->srcH);
        } else {
            $ctoW = $toW;
            $ctoH = $ctoW * ($this->srcH / $this->srcW);
        }
        $allImg = $this->CreatImage($this->im, $ctoW, $ctoH, 0, 0, 0, 0, $this->srcW, $this->srcH);
        $cImg = $this->CreatImage($allImg, $toW, $toH, 0, 0, ($ctoW - $toW) / 2, ($ctoH - $toH) / 2, $toW, $toH);
        return $this->EchoImage($cImg, $toFile);
        ImageDestroy($cImg);
        ImageDestroy($allImg);
    }
    //生成背景填充的缩图
    function BackFill($toFile, $toW, $toH, $bk1 = 255, $bk2 = 255, $bk3 = 255) {
        $toWH = $toW / $toH;
        $srcWH = $this->srcW / $this->srcH;
        if ($toWH < = $srcWH) {
            $ftoW = $toW;
            $ftoH = $ftoW * ($this->srcH / $this->srcW);
        } else {
            $ftoH = $toH;
            $ftoW = $ftoH * ($this->srcW / $this->srcH);
        }
        if (function_exists("imagecreatetruecolor")) {
            @$cImg = ImageCreateTrueColor($toW, $toH);
            if (!$cImg) {
                $cImg = ImageCreate($toW, $toH);
            }
        } else {
            $cImg = ImageCreate($toW, $toH);
        }
        $backcolor = imagecolorallocate($cImg, $bk1, $bk2, $bk3); //填充的背景颜色
        ImageFilledRectangle($cImg, 0, 0, $toW, $toH, $backcolor);
        if ($this->srcW > $toW || $this->srcH > $toH) {
            $proImg = $this->CreatImage($this->im, $ftoW, $ftoH, 0, 0, 0, 0, $this->srcW, $this->srcH);
            /*
               if($ftoW< $toW)  
               {  
                   ImageCopyMerge($cImg,$proImg,($toW-$ftoW)/2,0,0,0,$ftoW,$ftoH,100);  
               }  
               else if($ftoH<$toH)  
               {  
                   ImageCopyMerge($cImg,$proImg,0,($toH-$ftoH)/2,0,0,$ftoW,$ftoH,100);  
               }  
            */
            if ($ftoW < $toW) {
                ImageCopy($cImg, $proImg, ($toW - $ftoW) / 2, 0, 0, 0, $ftoW, $ftoH);
            } else if ($ftoH < $toH) {
                ImageCopy($cImg, $proImg, 0, ($toH - $ftoH) / 2, 0, 0, $ftoW, $ftoH);
            } else {
                ImageCopy($cImg, $proImg, 0, 0, 0, 0, $ftoW, $ftoH);
            }
        } else {
            ImageCopyMerge($cImg, $this->im, ($toW - $ftoW) / 2, ($toH - $ftoH) / 2, 0, 0, $ftoW, $ftoH, 100);
        }
        return $this->EchoImage($cImg, $toFile);
        ImageDestroy($cImg);
    }
    function CreatImage($img, $creatW, $creatH, $dstX, $dstY, $srcX, $srcY, $srcImgW, $srcImgH) {
        if (function_exists("imagecreatetruecolor")) {
            @$creatImg = ImageCreateTrueColor($creatW, $creatH);
            if ($creatImg) ImageCopyResampled($creatImg, $img, $dstX, $dstY, $srcX, $srcY, $creatW, $creatH, $srcImgW, $srcImgH);
            else {
                $creatImg = ImageCreate($creatW, $creatH);
                ImageCopyResized($creatImg, $img, $dstX, $dstY, $srcX, $srcY, $creatW, $creatH, $srcImgW, $srcImgH);
            }
        } else {
            $creatImg = ImageCreate($creatW, $creatH);
            ImageCopyResized($creatImg, $img, $dstX, $dstY, $srcX, $srcY, $creatW, $creatH, $srcImgW, $srcImgH);
        }
        return $creatImg;
    }
    //输出图片,link---只输出,不保存文件。file--保存为文件
    function EchoImage($img, $to_File) {
        switch ($this->echoType) {
            case "link":
                if (function_exists('imagejpeg')) return ImageJpeg($img);
                else return ImagePNG($img);
                break;
            case "file":
                if (function_exists('imagejpeg')) return ImageJpeg($img, $to_File);
                else return ImagePNG($img, $to_File);
                break;
            }
        }
    }


本文地址:http://www.phprm.com/tuxiang/fs4418.html

转载随意,但请附上文章地址:-)

标签:php智能图片 缩略图类

相关文章

发表留言