Posted in PHP onJune 25, 2014
共有两种等比例缩略图方法可以借鉴
一、为类文件,实例化之后即可使用
二、为自定义方法,比较轻巧
类文件
$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; } ?>
PHP生成等比缩略图类和自定义函数分享
- Author -
junjie声明:登载此文出于传递更多信息之目的,并不意味着赞同其观点或证实其描述。
Reply on: @reply_date@
@reply_contents@