PHP图像处理类库及演示分享
简单写了一个PHP的图像处理类库,虽然功能比较少,但是目前也没用到太高级的,以后用到了再填吧,或者哪位给点建议加上什么功能,或者有什么需求可以跟我说,我有时间加上,如果哪位对这个类库进行了扩展的话,还麻烦拿出来大家分享一下,代码现在是能用就行,考虑的东西不是很多,有什么更好的建议请告诉我,谢谢
Img.php
<?php /** *CreatedbyPhpStorm. *User:MCtion *Date:2015/5/140014 *Time:15:36 *简单的图像类库,本类中所有相对路径均基于网站根目录,如需修改,则修改常量__WEBROOT__即可 *功能:指定文字内容创建图片(不支持中文)、创建验证码图片、创建缩略图、其他功能待续 *方法: *Style(array$Options)设置图片样式,每次设定前将重置为默认样式 *Create_Img_Png()创建PNG图像,相关属性由Style指定 *Create_Img_Jpeg()创建JPEG图像,相关属性由Style指定 *Create_Verify()创建验证码图像,相关属性由Style指定 *Get_Verify()获得创建的验证码值,MD5加密 *Load_Img(string$FilePath)加载图像,创建图像源,供其他方法调用源,FilePath为图像相对路径 *Create_Thumb(string$FileName,string$FilePath)创建由Load_Img()加载的图像的缩略图,FileName为保存后的图像前缀,FilePath为保存图像的相对路径,不包含文件名(例:/Uploads/images/Thumb/) */ if(!defined("__WEBROOT__"))define("__WEBROOT__",$_SERVER['DOCUMENT_ROOT']); classImg{ protected$_Img;//图片源 protected$_FileImg;//加载的图片源 protected$_FileInfo;//加载的图片的信息数组 protected$_PicInfo;//加载的图片的宽高等信息数组 protected$_Rand='abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNOPQRSTUVWXYZ1234567890';//随机因子 protected$_Code='';//验证码 public$Width=300;//图片默认宽 public$Height=80;//图片默认高 public$BackgroundColor="000000"; public$Font="/phps/Public/Font/ARIALNB.TTF";//默认字体 public$FontSize=16;//默认字体字号 public$FontColor="ffffff";//默认字体颜色 public$Content="TestWord"; public$Align="left"; public$Codes=4;//验证码个数 public$Line=6;//干扰线条的个数 public$LoadErr='';//错误信息 //publicfunction__construct(){} /**设置图片属性 *@paramarray$Options属性数组 *@return$this返回对象 */ publicfunctionStyle($Options){ $this->_Re_Set(); foreach($Optionsas$K=>$V){ if(in_array($K,array('Width','Height','BackgroundColor','Font','FontSize','FontColor','Content','Align','Codes','Line','Snow'))){ if($K=="BackgroundColor"||$K=="FontColor"){ if(preg_match("#([a-zA-Z0-9]{6})#",$V))$this->$K=$V; }else{ $this->$K=$V; } } } return$this; } /** *重置属性,不提供外部访问 */ protectedfunction_Re_Set(){ $this->Width=100; $this->Height=30; $this->BackgroundColor="000000"; $this->Font="/phps/Public/Font/ARIALNB.TTF"; $this->FontSize=16; $this->FontColor="ffffff"; $this->Align="left"; $this->Codes=4; $this->Line=6; } /** *创建图像源、添加背景、创建图像 *@parambool$BGC指定是否创建背景色及矩形块 */ protectedfunction_Create_Img_GB($BGC=True){ $this->_Img=imagecreatetruecolor($this->Width,$this->Height);//创建背景源 if($BGC){ preg_match("#([a-zA-Z0-9]{2})([a-zA-Z0-9]{2})([a-zA-Z0-9]{2})#",$this->BackgroundColor,$ColorArr);//将颜色值分隔成三组16位进制数 $Color=imagecolorallocate($this->_Img,hexdec($ColorArr[1]),hexdec($ColorArr[2]),hexdec($ColorArr[3]));//给Img图像源添加背景色 imagefilledrectangle($this->_Img,0,$this->Height,$this->Width,0,$Color);//创建图像 } } /** *创建随机验证码 */ protectedfunction_Create_Code(){ $Len=strlen($this->_Rand)-1; for($i=0;$i<$this->Codes;$i++){ $this->_Code.=$this->_Rand[mt_rand(0,$Len)]; } } /** *向图像中写入字符串,暂不支持中文 */ protectedfunction_Write_Text(){ $FontWidth=imagefontwidth($this->FontSize);//获取字号的一个字符的宽度 preg_match_all('/(.)/us',$this->Content,$TextArr);//将内容分隔成数组一遍统计个数 $FontHeight=imagefontheight($this->FontSize);//获取字号的高度 $X=ceil(($this->Width-($FontWidth*count($TextArr[0])))/2);//设置X轴距左边距的距离 $Y=ceil(($this->Height+$FontHeight)/2);//设置Y轴距上边距的距离 preg_match("#([a-zA-Z0-9]{2})([a-zA-Z0-9]{2})([a-zA-Z0-9]{2})#",$this->FontColor,$ColorArr); $Color=imagecolorallocate($this->_Img,hexdec($ColorArr[1]),hexdec($ColorArr[2]),hexdec($ColorArr[3]));//设置文字颜色 imagettftext($this->_Img,$this->FontSize,0,$X,$Y,$Color,__WEBROOT__.$this->Font,$this->Content);//写入内容 } /** *向图像中写入验证码 */ protectedfunction_Write_Code(){ $_X=$this->Width/$this->Codes;//设置宽高比 for($i=0;$i<$this->Codes;$i++){//循环Codes次,每次生成一位验证码值 $Color=imagecolorallocate($this->_Img,mt_rand(0,156),mt_rand(0,156),mt_rand(0,156));//随机生成验证码值的颜色 imagettftext($this->_Img,$this->FontSize,mt_rand(-30,30),$_X*$i+mt_rand(1,5),$this->Height/1.3,$Color,__WEBROOT__.$this->Font,$this->_Code[$i]);//生成一位验证码值 } } /** *向图像中写入干扰线条 */ protectedfunction_Write_Line(){//生成干扰线条 for($i=0;$i<$this->Line;$i++){ $Color=imagecolorallocate($this->_Img,mt_rand(0,156),mt_rand(0,156),mt_rand(0,156)); imageline($this->_Img,mt_rand(0,$this->Width),mt_rand(0,$this->Height),mt_rand(0,$this->Width),mt_rand(0,$this->Height),$Color); } } /** *设置图像类型为JPEG */ protectedfunction_Img_Jpeg(){ header('Content-type:image/jpeg'); imagejpeg($this->_Img); imagedestroy($this->_Img); } /** *设置图像类型为PNG */ protectedfunction_Img_Png(){ header('Content-type:image/png'); imagepng($this->_Img); imagedestroy($this->_Img); } /** *创建JPEG的字符串图像 */ publicfunctionCreate_Img_Jpg(){ $this->_Create_Img_GB(True); $this->_Write_Text(); $this->_Img_Jpeg(); } /** *创建PNG的字符串图像 */ publicfunctionCreate_Img_Png(){ $this->_Create_Img_GB(True); $this->_Write_Text(); $this->_Img_Png(); } /** *创建验证码的PNG图像 */ publicfunctionCreate_Verify(){ $this->BackgroundColor=''; for($I=0;$I<3;$I++){ $this->BackgroundColor.=dechex(mt_rand(20,155)); } $this->_Create_Img_GB(True); $this->_Create_Code(); $this->_Write_Line(); $this->_Write_Code(); $this->_Img_Png(); } /** *外部获取MD5加密后的验证码 *@returnstring */ publicfunctionGet_Verify(){ returnmd5($this->_Code); } /** *加载一个图像文件,并获取图像相关信息 *@paramstring$FilePath图像相对路径地址 *@return$this|bool成功返回对象,否则返回FALSE */ publicfunctionLoad_Img($FilePath){ $FilePath=__WEBROOT__.$FilePath; if(!is_file($FilePath)){ $this->LoadErr="路径错误,文件不存在"; ReturnFalse; } $this->_PicInfo=getimagesize($FilePath); $this->_FileInfo=pathinfo($FilePath); switch($this->_PicInfo[2]){ case1:$this->_FileImg=imagecreatefromgif($FilePath);break; case2:$this->_FileImg=imagecreatefromjpeg($FilePath);break; case3:$this->_FileImg=imagecreatefrompng($FilePath);break; default:$this->LoadErr="类型错误,不支持的图片类型";ReturnFalse; } ReturnTrue; } /** *创建缩略图 *@paramstring$FileName保存的图片名称前缀 *@paramstring$FilePath保存图片的相对路径 *@returnmixed返回生成的图片的信息数组 */ publicfunctionCreate_Thumb($FileName,$FilePath){ $SavePath=__WEBROOT__.$FilePath; if(!file_exists($SavePath)){ mkdir($SavePath,0777,true); } $FileName=$FileName.date("YmdHis").rand(100,999).'.'.$this->_FileInfo['extension']; $FilePath=$FilePath.$FileName; $SavePath=$SavePath.$FileName; $this->_Create_Img_GB(False); imagecopyresampled($this->_Img,$this->_FileImg,0,0,0,0,$this->Width,$this->Height,$this->_PicInfo[0],$this->_PicInfo[1]); switch($this->_PicInfo[2]){ case1:imagegif($this->_Img,$SavePath);break; case2:imagejpeg($this->_Img,$SavePath);break; case3:imagepng($this->_Img,$SavePath);break; } $FIleInfo['FileName']=$FileName; $FIleInfo['FilePath']=$FilePath; Return$FIleInfo; } }
使用示例
$Img=newImg(); $Options['Width']=300; $Options['Height']=100; $Options['Content']="TestCreateImg"; $Options['FontColor']="FF0000"; $Options['BackgroundColor']="AAAAAA"; $Img->Style($Options)->Create_Img_Jpg(); if($Img->Load_Img("/Public/images/ad1.png")){ $FileInfo=$Img->Style(array('Width'=>30,'Height'=>30))->Create_Thumb("Thumb","/Uploads/images/"); var_dump($FileInfo); }else{ die("加载图像失败,".$Img->LoadErr); }
以上所述就是本文的全部内容了,希望大家能够喜欢。