PHP基于GD库的缩略图生成代码(支持jpg,gif,png格式)
还是老规矩,直接上代码
<?php /** *缩略图生成类,使用示例: */ $newimage=newImageResize(); $newimage->resize("tu.jpg","tu_lit.jpg",1000,1000); echo$newimage->GetLastError(); classImageResize{ private$localimage;//原图路径 private$remoteimage;//缩略图保存路径 private$localinfo;//原图属性 private$error; functionresize($localimg,$remoteimg,$x,$y){ //检测是否支持gd图像处理 if(!$this->_checkenv()){ returnfalse; } $this->localimage=$localimg; $this->remoteimage=$remoteimg; $this->localinfo=getimagesize($this->localimage);//获取本地图像的信息 return$this->_resize($x,$y); } /** *检测当前环境是否支持GD */ privatefunction_checkenv(){ if(!function_exists('gd_info')){ $this->error[]="当前环境不支持GD图像处理,请先安装GD库并开启PHP相关扩展"; returnfalse; } returntrue; } /** *生成缩略图主函数 *@paramint$x指定的缩略图宽度 *@paramint$y指定的缩略图高度 *@returnboolean */ privatefunction_resize($x,$y){ if(!$this->localinfo){ $this->error[]="本地图像文件不存在"; returnfalse; } //创建图像句柄 $im=@$this->_create($this->localinfo[2]); if(!$im){ $this->error[]="当前GD库不支持图像类型:{$this->localinfo['mime']}"; returnfalse; } $dstsize=$this->_dstsize($x,$y); $dstim=@imagecreatetruecolor($dstsize["width"],$dstsize["height"]); $whitecolor=@imagecolorallocatealpha($dstim,0,0,0,127); imagefill($dstim,0,0,$whitecolor); $re=@imagecopyresampled($dstim,$im,0,0,0,0,$dstsize["width"],$dstsize["height"],$this->localinfo[0],$this->localinfo[1]); if(!$re){ $this->error[]="图像重新采样失败"; returnfalse; } if(!imagejpeg($dstim,$this->remoteimage)){ if(!imagepng($dstim,$this->remoteimage)){ if(!imagegif($dstim,$this->remoteimage)){ $this->error[]="保存缩略图到{$this->remoteimage}失败,请检查gd环境是否正常和缩略图文件夹的写入权限。"; returnfalse; } } } $this->error[]="success"; returntrue; } /** *根据本地图片类型,创建图片资源 *@param图像类型代码$code *@returnresource/boolean成功则返回resourse失败则返回false */ privatefunction_create($code){ $src=$this->localimage; switch($code){ case1: returnimagecreatefromgif($src); break; case2: returnimagecreatefromjpeg($src); break; case3: returnimagecreatefrompng($src); break; default: returnfalse; break; } } /** *按比例计算合适的宽度 *@paramint$x指定的缩略图宽度 *@paramint$y指定的缩略图高度 *@returnarray包含调整后的缩略图宽度和高度 */ privatefunction_dstsize($x,$y){ list($srcwidth,$srcheight)=$this->localinfo; if(($srcwidth/$srcheight)<($x/$y)){ $x=floor($y*$srcwidth/$srcheight); }else{ $y=floor($x*$srcheight/$srcwidth); } $dstsize["width"]=$x; $dstsize["height"]=$y; return$dstsize; } /** *获取最后一条错误信息 *returnstring */ functionGetLastError(){ returnarray_pop($this->error); } /** *获取所有错误信息 *returnarray */ functionGetAllError(){ return$this->error; } }