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