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;
}
?>