Home  >  Article  >  php教程  >  手机照片不能生成缩略图问题以及解决方案

手机照片不能生成缩略图问题以及解决方案

PHP中文网
PHP中文网Original
2016-05-23 08:39:241906browse

跳至

//获取真实的图片类型
 list($width, $height, $type, $attr) = getimagesize($this->sur_file);
  switch($type) {  
    case 1 :  
      $img_type = 'gif';  
      break;  
    case 2 :  
      $img_type = 'jpeg';  
      break;  
    case 3 :  
      $img_type = 'png';  
      break;  
    case 15 :  
      $img_type = 'wbmp';  
      break;  
    default :  
      return false;  
  }

//下面把修改后的生成缩略图的类贴出来,供大家指正~
/**
 * php生成缩略图类
 * 修改者 点点细雨 
 * 文章出处 : http://blog.csdn.net/diandianxiyu_geek
 * 2014-07-23 解决了图片类型不能正常识别的问题
 */
class thumb {

  public $sur_file; //读取的原图片
  public $des_file; //生成目标图片
  public $tem_file; //临时图片
  public $tag;  //缩略标签  0,默认,按固定的高宽生成  1,按比列或固定最大长度生成  -1,按某个宽度或某个高度缩小
  public $resize_width;  //$tag为0时,目标文件宽
  public $resize_height;  //$tag为0时,目标文件高
  public $sca_max; //$tag为1时,<0$sca_max1时为最大长度(高或宽之中的最大值)
  public $type;  //图片类型
  public $width;  //原图片宽
  public $height;  //原图片高
  public $size;	 //原图大小

  //构造函数

  public function __construct($surpic, $reswid, $reshei, $despic, $mark, $scamax) {
    $this->sur_file = $surpic;
    $this->resize_width = $reswid;
    $this->resize_height = $reshei;
    $this->tag = $mark;
    $this->sca_max = $scamax;
    list($width, $height, $type, $attr) = getimagesize($this->sur_file);
    switch ($type) {
      case 1 :
        $img_type = &#39;gif&#39;;
        break;
      case 2 :
        $img_type = &#39;jpeg&#39;;
        break;
      case 3 :
        $img_type = &#39;png&#39;;
        break;
      case 15 :
        $img_type = &#39;wbmp&#39;;
        break;
      default :
        return false;
    }
    $this->type = $img_type; //获取图片类型
    $this->init_img(); //初始化图片
    $this->des_file = $despic; //目标图片地址
    $this->width = $width;
    $this->height = $height;
    $this->size = filesize($surpic);
    $this->new_img();
    imagedestroy($this->tem_file);
  }

  //图片初始化函数
  private function init_img() {
    if ($this->type == &#39;jpeg&#39;) {
      $this->tem_file = imagecreatefromjpeg($this->sur_file);
    } elseif ($this->type == &#39;jpg&#39;) {
      $this->tem_file = imagecreatefromjpeg($this->sur_file);
    } elseif ($this->type == &#39;gif&#39;) {
      $this->tem_file = imagecreatefromgif($this->sur_file);
    } elseif ($this->type == &#39;png&#39;) {
      $this->tem_file = imagecreatefrompng($this->sur_file);
    } elseif ($this->type == &#39;bmp&#39;) {
      $this->tem_file = imagecreatefrombmp($this->sur_file); //bmp.php中包含
    }
  }

  //图片生成函数
  private function new_img() {
    $ratio = ($this->width) / ($this->height); //原图比例
    $resize_ratio = ($this->resize_width) / ($this->resize_height); //缩略后比例
    $newimg = imagecreatetruecolor($this->resize_width, $this->resize_height); //生成新图片
    imagealphablending($newimg, false); //这里很重要,意思是不合并颜色,直接用$img图像颜色替换,包括透明色;
    imagesavealpha($newimg, true);
    if ($this->tag == 0) { //按固定高宽截取缩略图
      $newimg = imagecreatetruecolor($this->resize_width, $this->resize_height); //生成新图片
      if ($ratio >= $resize_ratio) {//即等比例下,缩略图的高比原图长,因此高不变
        imagecopyresampled($newimg, $this->tem_file, 0, 0, 0, 0, $this->resize_width, $this->resize_height, (($this->height) * $resize_ratio), $this->height);
      } elseif ($ratio < $resize_ratio) {//即等比例下,缩略图的宽比原图长,因此宽不变
        imagecopyresampled($newimg, $this->tem_file, 0, 0, 0, 0, $this->resize_width, $this->resize_height, $this->width, (($this->width) / $resize_ratio));
      }
    } elseif ($this->tag == 1) { //按固定比例或最大长度缩小
      if ($this->sca_max < 1) { //按比例缩小
        $newimg = imagecreatetruecolor((($this->width) * ($this->sca_max)), (($this->height) * ($this->sca_max))); //生成新图片
        imagecopyresampled($newimg, $this->tem_file, 0, 0, 0, 0, (($this->width) * ($this->sca_max)), (($this->height) * ($this->sca_max)), $this->width, $this->height);
      } elseif ($this->sca_max > 1) { //按某个最大长度缩小
        if ($ratio >= 1) { //宽比高长
          $newimg = imagecreatetruecolor($this->sca_max, ($this->sca_max / $ratio)); //生成新图片
          imagecopyresampled($newimg, $this->tem_file, 0, 0, 0, 0, $this->sca_max, ($this->sca_max / $ratio), $this->width, $this->height);
        } else {
          $newimg = imagecreatetruecolor(($this->sca_max * $ratio), $this->sca_max); //生成新图片
          imagecopyresampled($newimg, $this->tem_file, 0, 0, 0, 0, ($this->sca_max * $ratio), $this->sca_max, $this->width, $this->height);
        }
      }
    } elseif ($this->tag == -1) { //按某个宽度或某个高度缩小
      if ($resize_ratio >= 1) {//新高小于新宽,则图片按新宽度缩小
        $newimg = imagecreatetruecolor($this->resize_width, ($this->resize_width / $ratio)); //生成新图片
        imagecopyresampled($newimg, $this->tem_file, 0, 0, 0, 0, $this->resize_width, ($this->resize_width / $ratio), $this->width, $this->height);
      } elseif ($resize_ratio < 1) {//新宽小于新高,则图片按新高度缩小
        $newimg = imagecreatetruecolor(($this->resize_height * $ratio), $this->resize_height); //生成新图片
        imagecopyresampled($newimg, $this->tem_file, 0, 0, 0, 0, ($this->resize_height * $ratio), $this->resize_height, $this->width, $this->height);
      }
    }

    //输出新图片
    if ($this->type == &#39;jpeg&#39; || $this->type == &#39;jpg&#39;) {
      imagejpeg($newimg, $this->des_file);
    } elseif ($this->type == &#39;gif&#39;) {
      imagegif($newimg, $this->des_file);
    } elseif ($this->type == &#39;png&#39;) {
      imagepng($newimg, $this->des_file);
    } elseif ($this->type == &#39;bmp&#39;) {
      imagebmp($newimg, $this->des_file); //bmp.php中包含
    }
  }

#function new_img() end
}

                   

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn