PHP生成等比缩略图类和自定义函数分享

  共有两种等比例缩略图方法可以借鉴

  一、为类文件,实例化之后即可使用

  二、为自定义方法,比较轻巧

  类文件

  

复制代码 代码如下:
$resizeimage = new resizeimage("./shawn.jpg", "200", "100", "0","../pic/shawnsun.jpg");

  //实例化下面的类,就能生成缩略图

  //其中,源文件和缩略图地址可以相同,200,100分别代表宽和高,第四个参数为可选 0不截图,1为截图

  

复制代码 代码如下:
<?php

  class resizeimage{

  //图片类型

  public $type;

  //实际宽度

  public $width;

  //实际高度

  public $height;

  //改变后的宽度

  public $resize_width;

  //改变后的高度

  public $resize_height;

  //是否裁图

  public $cut;

  //源图象

  public $srcimg;

  //目标图象地址

  public $dstimg;

  //临时创建的图象

  public $im;

  function resizeimage($img, $wid, $hei,$c,$dstpath){

  $this--->srcimg = $img;

  $this->resize_width = $wid;

  $this->resize_height = $hei;

  $this->cut = $c;

  //图片的类型

  $this->type = strtolower(substr(strrchr($this->srcimg,"."),1));

  //初始化图象

  $this->initi_img();

  //目标图象地址

  $this->dst_img($dstpath);

  //W & H

  $this->width  = imagesx($this->im);

  $this->height = imagesy($this->im);

  //生成图象

  $this->newimg();

  ImageDestroy ($this->im);

  }

  function newimg(){

  //改变后的图象的比例

  $resize_ratio = ($this->resize_width)/($this->resize_height);

  //实际图象的比例

  $ratio = ($this->width)/($this->height);

  if(($this->cut)=="1")

  //裁图

  {

  if($ratio>=$resize_ratio)

  //高度优先

  {

  $newimg = imagecreatetruecolor($this->resize_width,$this->resize_height);

  imagecopyresampled($newimg, $this->im, 0, 0, 0, 0, $this->resize_width,

  $this->resize_height, (($this->height)*$resize_ratio),

  $this->height

  );

  ImageJpeg ($newimg,$this->dstimg);

  }

  if($ratio<$resize_ratio)

  //宽度优先

  {

  $newimg = imagecreatetruecolor($this->resize_width,$this->resize_height);

  imagecopyresampled($newimg, $this->im, 0, 0, 0, 0, $this->resize_width,

  $this->resize_height, $this->width,

  (($this->width)/$resize_ratio)

  );

  ImageJpeg ($newimg,$this->dstimg);

  }

  }

  else

  //不裁图

  {

  if($ratio>=$resize_ratio)

  {

  $newimg = imagecreatetruecolor($this->resize_width,

  ($this->resize_width)/$ratio

  );

  imagecopyresampled($newimg, $this->im, 0, 0, 0, 0, $this->resize_width,

  ($this->resize_width)/$ratio, $this->width,

  $this->height

  );

  ImageJpeg ($newimg,$this->dstimg);

  }

  if($ratio<$resize_ratio)

  {

  $newimg = imagecreatetruecolor(($this->resize_height)*$ratio,

  $this->resize_height

  );

  imagecopyresampled($newimg, $this->im, 0, 0, 0, 0,

  ($this->resize_height)*$ratio,

  $this->resize_height, $this->width,

  $this->height

  );

  ImageJpeg ($newimg,$this->dstimg);

  }

  }

  }

  //初始化图象

  function initi_img(){

  if($this->type=="jpg")

  {

  $this->im = imagecreatefromjpeg($this->srcimg);

  }

  if($this->type=="gif")

  {

  $this->im = imagecreatefromgif($this->srcimg);

  }

  if($this->type=="png")

  {

  $this->im = imagecreatefrompng($this->srcimg);

  }

  }

  //图象目标地址

  function dst_img($dstpath){

  $full_length  = strlen($this->srcimg);

  $type_length  = strlen($this->type);

  $name_length  = $full_length-$type_length;

  $name = substr($this->srcimg,0,$name_length-1);

  $this->dstimg = $dstpath;

  //echo $this->dstimg;

  }

  }

  ?>

  自定义方法

  

复制代码 代码如下:

  thumbs('shawn.jpg','shawnsun.jpg',100,100);

  //参数属性类似于方法一

  

复制代码 代码如下:

  <?php

  function thumbs($FileName,$SaveTo,$SetW,$SetH){

  $IMGInfo= getimagesize($FileName);

  if(!$IMGInfo) return false;

  if($IMGInfo['mime']== "image/pjpeg" || $IMGInfo['mime']=="image/jpeg"){

  $ThisPhoto= imagecreatefromjpeg($FileName);

  }elseif($IMGInfo['mime']== "image/x-png" || $IMGInfo['mime']== "image/png"){

  $ThisPhoto= imagecreatefrompng($FileName);

  }elseif($IMGInfo['mime']== "image/gif"){

  $ThisPhoto=imagecreatefromgif($FileName);

  }

  $width=$IMGInfo[0];

  $height=$IMGInfo[1];

  $scalc = max($width/$SetW,$height/$SetH);

  $nw = intval($width/$scalc);

  $nh = intval($height/$scalc);

  echo "缩略大小:w$nw,h$nh <br /-->";

  if($SetW-$nw == 1){$nw = $SetW;}

  if($SetH-$nh == 1){$nh = $SetH;}

  echo "+修正1像素: w$nw,h$nh<br>";

  //补宽

  if($SetW-$nw > 0){

  $nh = $nh +(($nh/$nw) * ($SetW-$nw));

  echo "*需补宽".($SetW-$nw).",陪补高".(($nh/$nw) * ($SetW-$nw))."  <br>";

  $nw = $SetW;

  }

  //补高

  if($SetH-$nh > 0){

  $nw = $nw + (($nw/$nh) * ($SetH-$nh));

  echo "*需补高".($SetH-$nh).",陪补宽". (($nw/$nh) * ($SetH-$nh)) ."<br>";

  $nh = $SetH;

  }

  $nw = intval($nw);

  $nh = intval($nh);

  echo "+修正大小:w$nw,h$nh<br>";

  $px = ($SetW - $nw)/2;

  $py = ($SetH - $nh)/2;

  echo "窗口大小:w$SetW,h$SetH <br>";

  echo "+偏移修正:x$px,y$py <br>";

  $NewPhoto=imagecreatetruecolor($SetW,$SetH);

  imagecopyresized($NewPhoto,$ThisPhoto,$px,$py,0,0,$nw,$nh,$width,$height);

  ImageJpeg ($NewPhoto,$SaveTo);

  return true;

  }

  ?>