赤锋 发表于 2015-8-29 09:58:16

PHP生成高清晰缩略图

  区别:

  imagecopyresized 生成一般缩略图
  imagecopyresampled 生成高清缩略图
  
  
  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($dst_width,$dst_height);

      //$bool    =imagecopyresized($this->dst,$src_h, 0, 0, 0, 0,140,105, $width, $height); //生成一般缩略图
$bool    =imagecopyresampled($this->dst,$src_h, 0, 0, 0, 0,$dst_width,$dst_height, $width, $height); //生成高清缩略图
//$new_file         = $this->exe.basename($this->src);
//$new_file   ='smll'.basename($this->src);
$new_file   =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;
                return $width;
                break;
            case 1:
                $height = $data;
                return $height;
                break;
            case 2:
                switch ($data)
                {
                  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;
                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 = $width * $width_ratio;
                $size = $height * $width_ratio;
                return $size;   
            }
            //高度优先
            else
            {
                $size = $width * $height_ratio;
                $size = $height * $height_ratio;
                return $size;
            }   
      }
      elseif($resize_height)
      {
            $size = $width;
            $size = $height * $height_ratio;
            return $size;
      }
      elseif($resize_width)
      {
            $size = $width * $width_ratio;
            $size = $height;
            return $size;
      }
    }
}
  $img=new image;
$img->resize_image('原图片路径',140,105,'',1);
?>
页: [1]
查看完整版本: PHP生成高清晰缩略图