08-05
23

dede 动态生成缩略图, 随意大小,,,,按最佳比例生成,,,方便特殊需要

需要在模版中需要调用缩图的地方用这个调用缩图就可以那,

[field:litpic runphp='yes']
$pic=str_replace('_lit.','_pic.',@me);
$picname=str_replace('_lit.','.',@me);
$picname=str_replace(''http://域名',$_SERVER[DOCUMENT_ROOT],$picname);
$litname=str_replace('http://域名',$_SERVER[DOCUMENT_ROOT],$pic);
$mkimg=new CreatMiniature();
$mkimg->SetVar($picname,'file');
$mkimg->Cut($litname,210,329); //这里设置动态生成的大小
@me = $pic;
[/field:litpic]


缩图函数自己加到inc_functions.php文件的最下面,,,,,,函数用的dede批量生成函数

/***************************************
按最小裁剪生成的缩图类
***************************************/
class CreatMiniature
{
   //公脖淞?br>    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 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 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;
     }
   }

}



经测试我发现这种方法和批量提取缩略图冲突!


文章来自: 本站原创
引用通告: 查看所有引用 | 我要引用此文章
Tags: dede 缩略图 比例
相关日志:
评论: 0 | 引用: 0 | 查看次数: 1402
发表评论
昵 称:
密 码: 游客发言不需要密码.
内 容:
验证码: 验证码
选 项:
虽然发表评论不用注册,但是为了保护您的发言权,建议您注册帐号.
字数限制 1000 字 | UBB代码 开启 | [img]标签 关闭