分享php多功能图片处理类
本文实例为大家分享了多功能php图片处理类,供大家参考,具体内容如下
<?php /** *Image.class.php图像处理类 *@authorAdministrator * */ classImage{ private$path=''; /** *构造方法 *@paramunknown$path */ function__construct($path=''){ if(!empty($path)){ $this->path=$path; } } /** +----------------------------------------------- *等比缩放函数 +----------------------------------------------- *@paramunknown$name需处理图片的名称 *@paramunknown$width缩放后的宽度 *@paramunknown$height缩放后的高度 *@paramstring$thumb_prixs缩放后的前缀名 *@returnmixed$newname返回的缩放后的文件名 */ functionthumb($name,$width,$height,$thumb_prixs='th_'){ //获取图片信息 $Info=$this->ImageInfo($name);//图片的宽度,高度,类型 //获取图片资源,各种类型的图片都可以创建资源,jpg,gif,png $imagres=$this->Img_resouce($name,$Info); //获取计算图片等比例之后的大小, $size=$this->getNewSize($name,$width,$height,$Info); //获取新的图片资源,处理透明背景 $newimg=$this->getImage($imagres,$size,$Info); //另存为一个新的图片,返回新的缩放后的图片名称 $newname=$this->SaveNewImage($newimg,$thumb_prixs.$name,$Info); return$newname; } /** +----------------------------------------------------------------------- *水印标记函数 +----------------------------------------------------------------------- *@paramunknown$backname背景文件名 *@paramunknown$watername水印文件名 *@paramnumber$waterpos水印位置 *@paramstring$wa_prixs水印前缀名 *@returnboolean */ functionwaterMark($backname,$watername,$waterpos=0,$wa_prixs='wa_'){ if(file_exists($this->path.$backname)&&file_exists($this->path.$watername)){ $backinfo=$this->ImageInfo($backname); $waterinfo=$this->ImageInfo($watername); if(!$pos=$this->getPos($backinfo,$waterinfo,$waterpos)){ echo"水印图片不应该比背景图片小"; returnfalse; } $backimg=$this->Img_resouce($backname,$backinfo); $waterimg=$this->Img_resouce($watername,$waterinfo); var_dump($backimg);exit(); $backimg=$this->CopyImage($backimg,$waterimg,$pos,$waterinfo); $this->SaveNewImage($backimg,$wa_prixs.$backname,$backinfo); }else{ echo"图片或水印不存在"; returnfalse; } } /** +----------------------------------------------------------------------- *获取图片信息函数 +----------------------------------------------------------------------- *@paramunknown$name *@returnunknown */ privatefunctionImageInfo($img){ $imageInfo=getimagesize($img); if($imageInfo!==false){ $imageType=strtolower(substr(image_type_to_extension($imageInfo[2]),1)); $imageSize=filesize($img); $Info=array( "width"=>$imageInfo[0], "height"=>$imageInfo[1], "type"=>$imageType, "size"=>$imageSize, "mime"=>$imageInfo['mime'] ); return$Info; }else{ returnfalse; } } /** +-------------------------------------------------------- *创建原图像格式函数 +-------------------------------------------------------- *@paramunknown$name *@paramunknown$imaginfo *@returnboolean|resource */ privatefunctionImg_resouce($name,$imageinfo){ $iamgeres=$this->path.$name; //var_dump($iamgeres);exit(); switch($imageinfo['type']){ case'gif': $img=imagecreatefromgif($name); break; case'jpg': $img=imagecreatefromjpeg($name); break; case'png': $img=imagecreatefrompng($name); break; } return$img; } /** +-------------------------------------------------- *获取等比缩放尺寸函数 +-------------------------------------------------- *@paramunknown$name *@paramunknown$width *@paramunknown$height *@paramunknown$imaginfo *@returnAmbigous<unknown,number> */ privatefunctiongetNewSize($name,$width,$height,$imaginfo){ $size['width']=$imaginfo['width']; $size['height']=$imaginfo['height']; if($width<$imaginfo['width']){ $size['width']=$width; } if($height<$imaginfo['height']){ $size['height']=$height; } //图像等比例缩放算法 if($imaginfo['width']*$size['width']>$imaginfo['height']*$size['height']){ $size['height']=round($imaginfo['height']*$size['width']/$imaginfo['width']); }else{ $size['width']=round($imaginfo['width']*$size['height']/$imaginfo['height']); } return$size; } privatefunctiongetImage($imageres,$size,$imageinfo){ //新建一个真彩色图像 $newimg=imagecreatetruecolor($size['width'],$size['height']); //将某个颜色定义为透明色 $otsc=imagecolortransparent($imageres); //获取图像的调色板的颜色数目 if($otsc>=0&&$otsc<=imagecolorstotal($imageres)){ //取得某索引的颜色 $stran=imagecolorsforindex($imageres,$otsc); //为图像分配颜色 $newt=imagecolorallocate($imageres,$stran['red'],$stran['green'],$stran['blue']); //区域填充函数 imagefill($newimg,0,0,$newt); //为图像定义透明色 imagecolortransparent($newimg,$newt); } imagecopyresized($newimg,$imageres,0,0,0,0,$size['width'],$size['height'],$imageinfo['width'],$imageinfo['height']); imagedestroy($imageres); return$newimg; } /** +---------------------------------------------- *保存图像函数 +---------------------------------------------- *@paramunknown$newimg *@paramunknown$newname *@paramunknown$imageinfo *@returnunknown */ privatefunctionSaveNewImage($newimg,$newname,$imageinfo){ switch($imageinfo['type']){ case1://gif $result=imagegif($newimg,$this->path.$newname); break; case2://jpg $result=imagejpeg($newimg,$this->path.$newname); break; case3://png $result=imagepng($newimg,$this->path.$newname); break; } imagedestroy($newimg); return$newname; } /** +----------------------------------------------------------------- *获取水印位置函数 +----------------------------------------------------------------- *@paramunknown$backinfo背景信息 *@paramunknown$waterinfo水印信息 *@paramunknown$waterpos水印位置 *@returnboolean|multitype:number返回坐标数组 */ privatefunctiongetPos($backinfo,$waterinfo,$waterpos){ if($backinfo['width']<$waterinfo['width']||$backinfo['height']<$waterinfo['height']){ returnfalse; } switch($waterpos){ case1://左上角 $posX=0; $posY=0; break; case2://中上方 $posX=$backinfo['width']-$waterinfo['width']/2; $posY=0; break; case3://右上角 $posX=$backinfo['width']-$waterinfo['width']; $posY=0; break; case4://左中方 $posX=0; $posY=$backinfo['height']-$waterinfo['height']/2; break; case5://正中间 $posX=$backinfo['width']-$waterinfo['width']/2; $posY=$backinfo['height']-$waterinfo['height']/2; break; case6://右中方 $posX=$backinfo['width']-$waterinfo['width']; $posY=$backinfo['height']-$waterinfo['height']/2; break; case7://底部靠左 $posX=0; $posY=$backinfo['height']-$waterinfo['height']; break; case8://底部居中 $posX=$backinfo['width']-$waterinfo['width']/2; $posY=$backinfo['height']-$waterinfo['height']; break; case9://底部靠右 $posX=$backinfo['width']-$waterinfo['width']; $posY=$backinfo['height']-$waterinfo['height']; break; case0: default: $posX=rand(0,$backinfo['width']-$waterinfo['width']); $posY=rand(0,$backinfo['height']-$waterinfo['height']); break; } returnarray('posX'=>$posX,'posY'=>$posY); } /** +------------------------------------------------------------------- *拷贝图像 +------------------------------------------------------------------- *@paramunknown$backimg背景资源 *@paramunknown$waterimg水印资源 *@paramunknown$pos水印位置 *@paramunknown$waterinfo水印信息 *@returnunknown */ privatefunctionCopyImage($backimg,$waterimg,$pos,$waterinfo){ imagecopy($backimg,$waterimg,$pos['posX'],$pos['posY'],0,0,$waterinfo['width'],$waterinfo['height']); imagedestroy($waterimg); return$backimg; } } ?>
以上就是本文的全部内容,希望对大家学习PHP程序设计有所帮助。