php图像处理类实例
本文实例讲述了php图像处理类。分享给大家供大家参考。具体如下:
<?php /** *Image类 */ classImage{ /** *@varstring$fileName文件名 *@accessprivate */ private$fileName=''; /** *@vargdresource$imageResource原图像 *@accessprivate */ private$imageResource=NULL; /** *@varint$imageWidth原图像宽 *@accessprivate */ private$imageWidth=NULL; /** *@varint$imageHeight原图像高 *@accessprivate */ private$imageHeight=NULL; /** *@varint$imageType原图像类型 *@accessprivate */ private$imageType=NULL; /** *@varint$imageWidth原图像宽 *@accessprivate */ public$width=NULL; /** *@varint$imageHeight原图像高 *@accessprivate */ public$height=NULL; /** *@varint$imageType原图像类型 *@accessprivate */ public$type=NULL; /** *@varint$newResource新图像 *@accessprivate */ private$newResource=NULL; /** *@varint$newResType新图像类型 *@accessprivate */ private$newResType=NULL; /** *构造函数 *@paramstring$fileName文件名 */ publicfunction__construct($fileName=NULL){ $this->fileName=$fileName; if($this->fileName){ $this->getSrcImageInfo(); } } /** *取源图像信息 *@accessprivate *@returnvoid */ privatefunctiongetSrcImageInfo(){ $info=$this->getImageInfo(); $this->imageWidth=$info[0]; $this->imageHeight=$info[1]; $this->imageType=$info[2]; $this->width=$info[0]; $this->height=$info[1]; $this->type=$info[2]; } /** *取图像信息 *@paramstring$fileName文件名 *@accessprivate *@returnarray */ privatefunctiongetImageInfo($fileName=NULL){ if($fileName==NULL){ $fileName=$this->fileName; } $info=getimagesize($fileName); return$info; } /** *创建源图像GD资源 *@accessprivate *@returnvoid */ privatefunctioncreateSrcImage(){ $this->imageResource=$this->createImageFromFile(); } /** *跟据文件创建图像GD资源 *@paramstring$fileName文件名 *@returngdresource */ publicfunctioncreateImageFromFile($fileName=NULL) { if(!$fileName){ $fileName=$this->fileName; $imgType=$this->imageType; } if(!is_readable($fileName)||!file_exists($fileName)){ thrownewException('Unabletoopenfile"'.$fileName.'"'); } if(!$imgType){ $imageInfo=$this->getImageInfo($fileName); $imgType=$imageInfo[2]; } switch($imgType){ caseIMAGETYPE_GIF: $tempResource=imagecreatefromgif($fileName); break; caseIMAGETYPE_JPEG: $tempResource=imagecreatefromjpeg($fileName); break; caseIMAGETYPE_PNG: $tempResource=imagecreatefrompng($fileName); break; caseIMAGETYPE_WBMP: $tempResource=imagecreatefromwbmp($fileName); break; caseIMAGETYPE_XBM: $tempResource=imagecreatefromxbm($fileName); break; default: thrownewException('Unsupportimagetype'); } return$tempResource; } /** *改变图像大小 *@paramint$width宽 *@paramint$height高 *@paramstring$flag一般而言,允许截图则用4,不允许截图则用1;假设要求一个为4:3比例的图像,则:4=如果太长则自动刪除一部分0=长宽转换成参数指定的1=按比例缩放,自动判断太长还是太宽,长宽约束在参数指定内2=以宽为约束缩放3=以高为约束缩放 *@paramstring$bgcolor如果不为null,则用这个参数指定的颜色作为背景色,并且图像扩充到指定高宽,该参数应该是一个数组; *@returnstring */ publicfunctionresizeImage($width,$height,$flag=1,$bgcolor=null){ $widthRatio=$width/$this->imageWidth; $heightRatio=$height/$this->imageHeight; switch($flag){ case1: if($this->imageHeight<$height&&$this->imageWidth<$width){ $endWidth=$this->imageWidth; $endHeight=$this->imageHeight; //return; }elseif(($this->imageHeight*$widthRatio)>$height){ $endWidth=ceil($this->imageWidth*$heightRatio); $endHeight=$height; }else{ $endWidth=$width; $endHeight=ceil($this->imageHeight*$widthRatio); } break; case2: $endWidth=$width; $endHeight=ceil($this->imageHeight*$widthRatio); break; case3: $endWidth=ceil($this->imageWidth*$heightRatio); $endHeight=$height; break; case4: $endWidth2=$width; $endHeight2=$height; if($this->imageHeight<$height&&$this->imageWidth<$width){ $endWidth=$this->imageWidth; $endHeight=$this->imageHeight; //return; }elseif(($this->imageHeight*$widthRatio)<$height){ $endWidth=ceil($this->imageWidth*$heightRatio); $endHeight=$height; }else{ $endWidth=$width; $endHeight=ceil($this->imageHeight*$widthRatio); } break; default: $endWidth=$width; $endHeight=$height; break; } if($this->imageResource==NULL){ $this->createSrcImage(); } if($bgcolor){ $this->newResource=imagecreatetruecolor($width,$height); $bg=ImageColorAllocate($this->newResource,$bgcolor[0],$bgcolor[1],$bgcolor[2]); ImageFilledRectangle($this->newResource,0,0,$width,$height,$bg); $tox=ceil(($width-$endWidth)/2); $toy=ceil(($height-$endHeight)/2); if($tox<0)$tox=0; if($toy<0)$toy=0; }elseif($flag==4){ $this->newResource=imagecreatetruecolor($endWidth2,$endHeight2); }else{ $this->newResource=imagecreatetruecolor($endWidth,$endHeight); } $this->newResType=$this->imageType; imagecopyresampled($this->newResource,$this->imageResource,$tox,$toy,0,0,$endWidth,$endHeight,$this->imageWidth,$this->imageHeight); } /** *给图像加水印 *@paramstring$waterContent水印内容可以是图像文件名,也可以是文字 *@paramint$pos位置0-9可以是数组 *@paramint$textFont字体大字,当水印内容是文字时有效 *@paramstring$textColor文字颜色,当水印内容是文字时有效 *@returnstring */ publicfunctionwaterMark($waterContent,$pos=0,$textFont=5,$textColor="#ffffff"){ $isWaterImage=file_exists($waterContent); if($isWaterImage){ $waterImgRes=$this->createImageFromFile($waterContent); $waterImgInfo=$this->getImageInfo($waterContent); $waterWidth=$waterImgInfo[0]; $waterHeight=$waterImgInfo[1]; }else{ $waterText=$waterContent; //$temp=@imagettfbbox(ceil($textFont*2.5),0,"./cour.ttf",$waterContent); if($temp){ $waterWidth=$temp[2]-$temp[6]; $waterHeight=$temp[3]-$temp[7]; }else{ $waterWidth=100; $waterHeight=12; } } if($this->imageResource==NULL){ $this->createSrcImage(); } switch($pos) { case0://随机 $posX=rand(0,($this->imageWidth-$waterWidth)); $posY=rand(0,($this->imageHeight-$waterHeight)); break; case1://1为顶端居左 $posX=0; $posY=0; break; case2://2为顶端居中 $posX=($this->imageWidth-$waterWidth)/2; $posY=0; break; case3://3为顶端居右 $posX=$this->imageWidth-$waterWidth; $posY=0; break; case4://4为中部居左 $posX=0; $posY=($this->imageHeight-$waterHeight)/2; break; case5://5为中部居中 $posX=($this->imageWidth-$waterWidth)/2; $posY=($this->imageHeight-$waterHeight)/2; break; case6://6为中部居右 $posX=$this->imageWidth-$waterWidth; $posY=($this->imageHeight-$waterHeight)/2; break; case7://7为底端居左 $posX=0; $posY=$this->imageHeight-$waterHeight; break; case8://8为底端居中 $posX=($this->imageWidth-$waterWidth)/2; $posY=$this->imageHeight-$waterHeight; break; case9://9为底端居右 $posX=$this->imageWidth-$waterWidth-20; $posY=$this->imageHeight-$waterHeight-10; break; default://随机 $posX=rand(0,($this->imageWidth-$waterWidth)); $posY=rand(0,($this->imageHeight-$waterHeight)); break; } imagealphablending($this->imageResource,true); if($isWaterImage){ imagecopy($this->imageResource,$waterImgRes,$posX,$posY,0,0,$waterWidth,$waterHeight); }else{ $R=hexdec(substr($textColor,1,2)); $G=hexdec(substr($textColor,3,2)); $B=hexdec(substr($textColor,5)); $textColor=imagecolorallocate($this->imageResource,$R,$G,$B); imagestring($this->imageResource,$textFont,$posX,$posY,$waterText,$textColor); } $this->newResource=$this->imageResource; $this->newResType=$this->imageType; } /** *生成验证码图片 *@paramint$width宽 *@paramstring$height高 *@paramint$length长度 *@paramint$validType0=数字,1=字母,2=数字加字母 *@paramstring$textColor文字颜色 *@paramstring$backgroundColor背景颜色 *@returnvoid */ publicfunctionimageValidate($width,$height,$length=4,$validType=1,$textColor='#000000',$backgroundColor='#ffffff'){ if($validType==1){ $validString='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'; $validLength=52; }elseif($validType==2){ $validString='0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'; $validLength=62; }else{ $validString='123456789'; $validLength=9; } srand((int)time()); $valid=''; for($i=0;$i<$length;$i++){ $valid.=$validString{rand(0,$validLength-1)}; } $this->newResource=imagecreate($width,$height); $bgR=hexdec(substr($backgroundColor,1,2)); $bgG=hexdec(substr($backgroundColor,3,2)); $bgB=hexdec(substr($backgroundColor,5,2)); $backgroundColor=imagecolorallocate($this->newResource,$bgR,$bgG,$bgB); $tR=hexdec(substr($textColor,1,2)); $tG=hexdec(substr($textColor,3,2)); $tB=hexdec(substr($textColor,5,2)); $textColor=imagecolorallocate($this->newResource,$tR,$tG,$tB); for($i=0;$i<strlen($valid);$i++){ imagestring($this->newResource,5,$i*$width/$length+3,2,$valid[$i],$textColor); } $this->newResType=IMAGETYPE_JPEG; return$valid; } /** *显示输出图像 *@returnvoid */ publicfunctiondisplay($fileName='',$quality=100){ $imgType=$this->newResType; $imageSrc=$this->newResource; switch($imgType){ caseIMAGETYPE_GIF: if($fileName==''){ header('Content-type:image/gif'); } imagegif($imageSrc,$fileName,$quality); break; caseIMAGETYPE_JPEG: if($fileName==''){ header('Content-type:image/jpeg'); } imagejpeg($imageSrc,$fileName,$quality); break; caseIMAGETYPE_PNG: if($fileName==''){ header('Content-type:image/png'); imagepng($imageSrc); }else{ imagepng($imageSrc,$fileName); } break; caseIMAGETYPE_WBMP: if($fileName==''){ header('Content-type:image/wbmp'); } imagewbmp($imageSrc,$fileName,$quality); break; caseIMAGETYPE_XBM: if($fileName==''){ header('Content-type:image/xbm'); } imagexbm($imageSrc,$fileName,$quality); break; default: thrownewException('Unsupportimagetype'); } imagedestroy($imageSrc); } /** *保存图像 *@paramint$fileNameType文件名类型0使用原文件名,1使用指定的文件名,2在原文件名加上后缀,3产生随机文件名 *@paramstring$folder文件夹路径为空为与原文件相同 *@paramstring$param参数$fileNameType为1时为文件名2时为后缀 *@returnvoid */ publicfunctionsave($fileNameType=0,$folder=NULL,$param='_miniature'){ if($folder==NULL){ $folder=dirname($this->fileName).DIRECTORY_SEPARATOR; } $fileExtName=FileSystem::fileExt($this->fileName,true); $fileBesicName=FileSystem::getBasicName($this->fileName,false); switch($fileNameType){ case1: $newFileName=$folder.$param; break; case2: $newFileName=$folder.$fileBesicName.$param.$fileExtName; break; case3: $tmp=date('YmdHis'); $fileBesicName=$tmp; $i=0; while(file_exists($folder.$fileBesicName.$fileExtName)){ $fileBesicName=$tmp.$i; $i++; } $newFileName=$folder.$fileBesicName.$fileExtName; break; default: $newFileName=$this->fileName; break; } $this->display($newFileName); return$newFileName; } } ?>
希望本文所述对大家的php程序设计有所帮助。