zoukankan      html  css  js  c++  java
  • 智能的PHP缩图类

    *作者:落梦天蝎(beluckly)
    *完成时间:2006-12-18
    *类名:CreatMiniature
    *功能:生成多种类型的缩略图
    *基本参数:$srcFile,$echoType
    *方法用到的参数:
    $toFile,生成的文件
    $toW,生成的宽
    $toH,生成的高
    $bk1,背景颜色参数 以255为最高
    $bk2,背景颜色参数
    $bk3,背景颜色参数

    *例子:

      1 < ?php
      2  
      3 /***************************************
      4 *作者:落梦天蝎(beluckly)
      5 *完成时间:2006-12-18
      6 *类名:CreatMiniature
      7 *功能:生成多种类型的缩略图
      8 *基本参数:$srcFile,$echoType
      9 *方法用到的参数:
     10                 $toFile,生成的文件
     11                 $toW,生成的宽
     12                 $toH,生成的高
     13                 $bk1,背景颜色参数 以255为最高
     14                 $bk2,背景颜色参数
     15                 $bk3,背景颜色参数
     16  
     17 *例子:
     18  
     19     include("thumb.php");
     20     $cm=new CreatMiniature();
     21     $cm->SetVar("1.jpg","file");
     22     $cm->Distortion("dis_bei.jpg",150,200);
     23     $cm->Prorate("pro_bei.jpg",150,200);
     24     $cm->Cut("cut_bei.jpg",150,200);
     25     $cm->BackFill("fill_bei.jpg",150,200);
     26  
     27 ***************************************/
     28  
     29 class CreatMiniature
     30 {
     31     //公共变量
     32     var $srcFile="";        //原图
     33     var $echoType;            //输出图片类型,link--不保存为文件;file--保存为文件
     34     var $im="";                //临时变量
     35     var $srcW="";            //原图宽
     36     var $srcH="";            //原图高
     37  
     38     //设置变量及初始化
     39     function SetVar($srcFile,$echoType)
     40     {
     41         $this->srcFile=$srcFile;
     42         $this->echoType=$echoType;
     43  
     44         $info = "";
     45         $data = GetImageSize($this->srcFile,$info);
     46         switch ($data[2]) 
     47         {
     48          case 1:
     49            if(!function_exists("imagecreatefromgif")){
     50             echo "你的GD库不能使用GIF格式的图片,请使用Jpeg或PNG格式!<a href='javascript:go(-1);'>返回</a>";
     51             exit();
     52            }
     53            $this->im = ImageCreateFromGIF($this->srcFile);
     54            break;
     55         case 2:
     56           if(!function_exists("imagecreatefromjpeg")){
     57            echo "你的GD库不能使用jpeg格式的图片,请使用其它格式的图片!<a href='javascript:go(-1);'>返回</a>";
     58            exit();
     59           }
     60           $this->im = ImageCreateFromJpeg($this->srcFile);    
     61           break;
     62         case 3:
     63           $this->im = ImageCreateFromPNG($this->srcFile);    
     64           break;
     65       }
     66       $this->srcW=ImageSX($this->im);
     67       $this->srcH=ImageSY($this->im); 
     68     }
     69     
     70     //生成扭曲型缩图
     71     function Distortion($toFile,$toW,$toH)
     72     {
     73         $cImg=$this->CreatImage($this->im,$toW,$toH,0,0,0,0,$this->srcW,$this->srcH);
     74         return $this->EchoImage($cImg,$toFile);
     75         ImageDestroy($cImg);
     76     }
     77     
     78     //生成按比例缩放的缩图
     79     function Prorate($toFile,$toW,$toH)
     80     {
     81         $toWH=$toW/$toH;
     82         $srcWH=$this->srcW/$this->srcH;
     83         if($toWH< =$srcWH)
     84         {
     85             $ftoW=$toW;
     86             $ftoH=$ftoW*($this->srcH/$this->srcW);
     87         }
     88         else
     89         {
     90               $ftoH=$toH;
     91               $ftoW=$ftoH*($this->srcW/$this->srcH);
     92         }
     93         if($this->srcW>$toW||$this->srcH>$toH)
     94         {
     95             $cImg=$this->CreatImage($this->im,$ftoW,$ftoH,0,0,0,0,$this->srcW,$this->srcH);
     96             return $this->EchoImage($cImg,$toFile);
     97             ImageDestroy($cImg);
     98         }
     99         else
    100         {
    101             $cImg=$this->CreatImage($this->im,$this->srcW,$this->srcH,0,0,0,0,$this->srcW,$this->srcH);
    102             return $this->EchoImage($cImg,$toFile);
    103             ImageDestroy($cImg);
    104         }
    105     }
    106     
    107     //生成最小裁剪后的缩图
    108     function Cut($toFile,$toW,$toH)
    109     {
    110           $toWH=$toW/$toH;
    111           $srcWH=$this->srcW/$this->srcH;
    112           if($toWH< =$srcWH)
    113           {
    114                $ctoH=$toH;
    115                $ctoW=$ctoH*($this->srcW/$this->srcH);
    116           }
    117           else
    118           {
    119               $ctoW=$toW;
    120               $ctoH=$ctoW*($this->srcH/$this->srcW);
    121           } 
    122         $allImg=$this->CreatImage($this->im,$ctoW,$ctoH,0,0,0,0,$this->srcW,$this->srcH);
    123         $cImg=$this->CreatImage($allImg,$toW,$toH,0,0,($ctoW-$toW)/2,($ctoH-$toH)/2,$toW,$toH);
    124         return $this->EchoImage($cImg,$toFile);
    125         ImageDestroy($cImg);
    126         ImageDestroy($allImg);
    127     }
    128  
    129     //生成背景填充的缩图
    130     function BackFill($toFile,$toW,$toH,$bk1=255,$bk2=255,$bk3=255)
    131     {
    132         $toWH=$toW/$toH;
    133         $srcWH=$this->srcW/$this->srcH;
    134         if($toWH< =$srcWH)
    135         {
    136             $ftoW=$toW;
    137             $ftoH=$ftoW*($this->srcH/$this->srcW);
    138         }
    139         else
    140         {
    141               $ftoH=$toH;
    142               $ftoW=$ftoH*($this->srcW/$this->srcH);
    143         }
    144         if(function_exists("imagecreatetruecolor"))
    145         {
    146             @$cImg=ImageCreateTrueColor($toW,$toH);
    147             if(!$cImg)
    148             {
    149                 $cImg=ImageCreate($toW,$toH);
    150             }
    151         }
    152         else
    153         {
    154             $cImg=ImageCreate($toW,$toH);
    155         }
    156         $backcolor = imagecolorallocate($cImg, $bk1, $bk2, $bk3);        //填充的背景颜色
    157         ImageFilledRectangle($cImg,0,0,$toW,$toH,$backcolor);
    158         if($this->srcW>$toW||$this->srcH>$toH)
    159         {     
    160             $proImg=$this->CreatImage($this->im,$ftoW,$ftoH,0,0,0,0,$this->srcW,$this->srcH);
    161             /*
    162              if($ftoW< $toW)
    163              {
    164                  ImageCopyMerge($cImg,$proImg,($toW-$ftoW)/2,0,0,0,$ftoW,$ftoH,100);
    165              }
    166              else if($ftoH<$toH)
    167              {
    168                  ImageCopyMerge($cImg,$proImg,0,($toH-$ftoH)/2,0,0,$ftoW,$ftoH,100);
    169              }
    170              */
    171             if($ftoW<$toW)
    172             {
    173                  ImageCopy($cImg,$proImg,($toW-$ftoW)/2,0,0,0,$ftoW,$ftoH);
    174             }
    175             else if($ftoH<$toH)
    176             {
    177                  ImageCopy($cImg,$proImg,0,($toH-$ftoH)/2,0,0,$ftoW,$ftoH);
    178             }
    179             else
    180             {
    181                  ImageCopy($cImg,$proImg,0,0,0,0,$ftoW,$ftoH);
    182             } 
    183         }
    184         else
    185         {
    186              ImageCopyMerge($cImg,$this->im,($toW-$ftoW)/2,($toH-$ftoH)/2,0,0,$ftoW,$ftoH,100);
    187         }
    188         return $this->EchoImage($cImg,$toFile);
    189         ImageDestroy($cImg);
    190     }
    191     
    192  
    193     function CreatImage($img,$creatW,$creatH,$dstX,$dstY,$srcX,$srcY,$srcImgW,$srcImgH)
    194     {
    195         if(function_exists("imagecreatetruecolor"))
    196         {
    197             @$creatImg = ImageCreateTrueColor($creatW,$creatH);
    198             if($creatImg) 
    199                 ImageCopyResampled($creatImg,$img,$dstX,$dstY,$srcX,$srcY,$creatW,$creatH,$srcImgW,$srcImgH);
    200             else
    201             {
    202                 $creatImg=ImageCreate($creatW,$creatH);
    203                 ImageCopyResized($creatImg,$img,$dstX,$dstY,$srcX,$srcY,$creatW,$creatH,$srcImgW,$srcImgH);
    204             }
    205          }
    206          else
    207          {
    208             $creatImg=ImageCreate($creatW,$creatH);
    209             ImageCopyResized($creatImg,$img,$dstX,$dstY,$srcX,$srcY,$creatW,$creatH,$srcImgW,$srcImgH);
    210          }
    211          return $creatImg;
    212     }
    213     
    214     //输出图片,link---只输出,不保存文件。file--保存为文件
    215     function EchoImage($img,$to_File)
    216     {
    217         switch($this->echoType)
    218         {
    219             case "link":
    220                 if(function_exists('imagejpeg')) return ImageJpeg($img);
    221                 else return ImagePNG($img);
    222                 break;
    223             case "file":
    224                 if(function_exists('imagejpeg')) return ImageJpeg($img,$to_File);
    225                 else return ImagePNG($img,$to_File);
    226                 break;
    227         }
    228     }
    229  
    230 }
    231 ?>
  • 相关阅读:
    Docker 命令自动补全?要的
    Windows 的这款工具,有时让我觉得 Mac 不是很香
    cheat.sh在手,天下我有
    妙用 Intellij IDEA 创建临时文件,Git 跟踪不到的那种
    AWS Lambda 借助 Serverless Framework,迅速起飞
    你说说对Java中SPI的理解吧
    你说一下对Java中的volatile的理解吧
    TCP 队列溢出了
    #未来时间思考
    #此平台不支持虚拟化的Intel VT-x/EPT #VMware Workstation 与 Device/Credential Guard 不兼容,且在禁用Device/Credential Guard后才能运行VMware
  • 原文地址:https://www.cnblogs.com/CHEUNGKAMING/p/4092816.html
Copyright © 2011-2022 走看看