PHP实现对png图像进行缩放的方法(支持透明背景)
本文实例讲述了PHP实现对png图像进行缩放的方法。分享给大家供大家参考。具体实现方法如下:
functionsmart_resize_image($file,$width=0,$height=0,$proportional=false,$output='file',$delete_original=true,$use_linux_commands=false)
{
if($height<=0&&$width<=0){
returnfalse;
}
$info=getimagesize($file);
$image='';
$final_width=0;
$final_height=0;
list($width_old,$height_old)=$info;
if($proportional){
if($width==0)$factor=$height/$height_old;
elseif($height==0)$factor=$width/$width_old;
else$factor=min($width/$width_old,$height/$height_old);
$final_width=round($width_old*$factor);
$final_height=round($height_old*$factor);
}
else{
$final_width=($width<=0)?$width_old:$width;
$final_height=($height<=0)?$height_old:$height;
}
switch($info[2]){
caseIMAGETYPE_GIF:
$image=imagecreatefromgif($file);
break;
caseIMAGETYPE_JPEG:
$image=imagecreatefromjpeg($file);
break;
caseIMAGETYPE_PNG:
$image=imagecreatefrompng($file);
break;
default:
returnfalse;
}
$image_resized=imagecreatetruecolor($final_width,$final_height);
if(($info[2]==IMAGETYPE_GIF)||($info[2]==IMAGETYPE_PNG)){
$trnprt_indx=imagecolortransparent($image);
//Ifwehaveaspecifictransparentcolor
if($trnprt_indx>=0){
//Gettheoriginalimage'stransparentcolor'sRGBvalues
$trnprt_color=imagecolorsforindex($image,$trnprt_indx);
//Allocatethesamecolorinthenewimageresource
$trnprt_indx=imagecolorallocate($image_resized,$trnprt_color['red'],$trnprt_color['green'],$trnprt_color['blue']);
//Completelyfillthebackgroundofthenewimagewithallocatedcolor.
imagefill($image_resized,0,0,$trnprt_indx);
//Setthebackgroundcolorfornewimagetotransparent
imagecolortransparent($image_resized,$trnprt_indx);
}
//AlwaysmakeatransparentbackgroundcolorforPNGsthatdon'thaveoneallocatedalready
elseif($info[2]==IMAGETYPE_PNG){
//Turnofftransparencyblending(temporarily)
imagealphablending($image_resized,false);
//Createanewtransparentcolorforimage
$color=imagecolorallocatealpha($image_resized,0,0,0,127);
//Completelyfillthebackgroundofthenewimagewithallocatedcolor.
imagefill($image_resized,0,0,$color);
//Restoretransparencyblending
imagesavealpha($image_resized,true);
}
}
imagecopyresampled($image_resized,$image,0,0,0,0,$final_width,$final_height,$width_old,$height_old);
if($delete_original){
if($use_linux_commands)
exec('rm'.$file);
else
@unlink($file);
}
switch(strtolower($output)){
case'browser':
$mime=image_type_to_mime_type($info[2]);
header("Content-type:$mime");
$output=NULL;
break;
case'file':
$output=$file;
break;
case'return':
return$image_resized;
break;
default:
break;
}
switch($info[2]){
caseIMAGETYPE_GIF:
imagegif($image_resized,$output);
break;
caseIMAGETYPE_JPEG:
imagejpeg($image_resized,$output);
break;
caseIMAGETYPE_PNG:
imagepng($image_resized,$output);
break;
default:
returnfalse;
}
returntrue;
}
希望本文所述对大家的php程序设计有所帮助。
