PHP生成等比缩略图类和自定义函数分享
共有两种等比例缩略图方法可以借鉴
一、为类文件,实例化之后即可使用
二、为自定义方法,比较轻巧
类文件
$resizeimage=newresizeimage("./shawn.jpg","200","100","0","../pic/shawnsun.jpg"); //实例化下面的类,就能生成缩略图 //其中,源文件和缩略图地址可以相同,200,100分别代表宽和高,第四个参数为可选0不截图,1为截图
<?php classresizeimage{ //图片类型 public$type; //实际宽度 public$width; //实际高度 public$height; //改变后的宽度 public$resize_width; //改变后的高度 public$resize_height; //是否裁图 public$cut; //源图象 public$srcimg; //目标图象地址 public$dstimg; //临时创建的图象 public$im; functionresizeimage($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); } functionnewimg(){ //改变后的图象的比例 $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); } } } //初始化图象 functioniniti_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); } } //图象目标地址 functiondst_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 functionthumbs($FileName,$SaveTo,$SetW,$SetH){ $IMGInfo=getimagesize($FileName); if(!$IMGInfo)returnfalse; 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); returntrue; } ?>