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程序设计有所帮助。