PHP中生成图片文件的缩略图,主要利用Imagecopyresampled、imagecopyresized函数分别处理GIF图片和其它类型图片。
生成缩略图的关键是按照比例计算好新图片的宽度和高度。
//根据制定宽度、高度生成图片缩略图
function resizeimage($filename,$width=500,$height=500)
{
//define variable
$oldwidth;
$oldheight;
$oldsize;
$newwidth;
$newheight;
$newsize;
$newfilename;
$imagetype;
$oldimage;
$newimage;
//init variable
$newfilename='';
//create new image
if(file_exists($filename) && preg_match("/s*\.[jpg|gif|jpeg|png]/i",$filename))
{
//根据原始图片大小比例和新的图片宽度高度,计算获取新的实际宽度、高度,主要是为了保持比例
$newsize=makeimagesize($filename,$width,$height);
$newwidth=$newsize['width'];
$newheight=$newsize['height'];
//get new image file name
$newfilename=getpath($filename).getfilename($filename).'resize.'.getextendname($filename);
//get image type 获取文件类型
$imagetype=getimagetype($filename);
//get old image size 获取原始图片大小
$oldsize=getimagesize($filename);
$oldwidth=$oldsize[0];
$oldheight=$oldsize[1];
//get old image content 读取原始图片内容
if($imagetype==IMAGETYPE_GIF)
$oldimage=imagecreatefromgif($filename);
elseif($imagetype==IMAGETYPE_JPEG)
$oldimage=imagecreatefromjpeg($filename);
elseif($imagetype==IMAGETYPE_PNG)
$oldimage=imagecreatefrompng($filename);
else
$oldimage='';
//生成新的图片
if(!empty($oldimage))
{
//create new image
if(function_exists('imagecreatetruecolor') && ($imagetype!=IMAGETYPE_GIF))
{
$newimage=imagecreatetruecolor($newwidth,$newheight);
imagecopyresampled($newimage,$oldimage,0,0,0,0,$newwidth,$newheight,$oldwidth,$oldheight);
}
else
{
$newimage=imagecreate($newwidth,$newheight);
imagecopyresized($newimage,$oldimage,0,0,0,0,$newwidth,$newheight,$oldwidth,$oldheight);
}
//delete old reisize file
if(file_exists($newfilename))
unlink($newfilename);
//save to file 写入磁盘文件
if($imagetype==IMAGETYPE_GIF)
imagepng($newimage,$newfilename);
elseif($imagetype==IMAGETYPE_JPEG)
imagejpeg($newimage,$newfilename);
elseif($imagetype==IMAGETYPE_PNG)
imagepng($newimage,$newfilename);
else
$newfilename='';
//释放资源
//destroy image resource
imagedestroy($oldimage);
imagedestroy($newimage);
}
else
$newfilename='';
}
//return new filename
return $newfilename;
}
//按照比例计算新的图片大小
function makeimagesize($filename,$width,$height)
{
//define variable
$size;
$oldsize;
$oldwidth;
$oldheight;
$newwidth;
$newheight;
//init variable
$size['width']=0;
$size['height']=0;
//get current image size
$oldsize=getimagesize($filename);
$oldwidth=$oldsize[0];
$oldheight=$oldsize[1];
if($oldwidth>0 && $oldheight>0)
{
$newwidth=$width;
$newheight=round($newwidth*($oldheight/$oldwidth));
if($newheight>$height)
{
$newheight=$height;
$newwidth=round($newheight*($oldwidth/$oldheight));
}
if($newwidth<$oldwidth && $newheight<$oldheight)
{
$size['width']=$newwidth;
$size['height']=$newheight;
}
else
{
$size['width']=$oldwidth;
$size['height']=$oldheight;
}
}
return $size;
}
|