共有两种等比例缩略图方法可以借鉴
一、为类文件,实例化之后即可使用
二、为自定义方法,比较轻巧
类文件
$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;
}
?>