本文实例为大家分享了多功能php图片处理类,供大家参考,具体内容如下
/*** Image.class.php 图像处理类* @author Administrator**/
class Image{private $path='';
/*** 构造方法* @param unknown $path*/
function __construct($path=''){if (!empty($path)) {$this->path=$path;
}
}
/**+-----------------------------------------------* 等比缩放函数+-----------------------------------------------* @param unknown $name 需处理图片的名称* @param unknown $width 缩放后的宽度* @param unknown $height 缩放后的高度* @param string $thumb_prixs 缩放后的前缀名* @return mixed $newname 返回的缩放后的文件名*/
function thumb($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;
}
/**+-----------------------------------------------------------------------* 水印标记函数+-----------------------------------------------------------------------* @param unknown $backname背景文件名* @param unknown $watername 水印文件名* @param number $waterpos水印位置* @param string $wa_prixs水印前缀名* @return boolean*/
function waterMark($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 "水印图片不应该比背景图片小";
return false;
}
$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 "图片或水印不存在";
return false;
}
}
/**+-----------------------------------------------------------------------* 获取图片信息函数+-----------------------------------------------------------------------* @param unknown $name* @return unknown*/
private function ImageInfo($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{return false;
}
}
/**+--------------------------------------------------------* 创建原图像格式函数+--------------------------------------------------------* @param unknown $name* @param unknown $imaginfo* @return boolean|resource*/
private function Img_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;
}
/**+--------------------------------------------------* 获取等比缩放尺寸函数+--------------------------------------------------* @param unknown $name* @param unknown $width* @param unknown $height* @param unknown $imaginfo* @return Ambigous
*/
private function getNewSize($name,$width,$height,$imaginfo){$size['width']=$imaginfo['width'];
$size['height']=$imaginfo['height'];
if ($width
}
if ($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;
}
private function getImage($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;
}
/**+----------------------------------------------*保存图像函数+----------------------------------------------* @param unknown $newimg* @param unknown $newname* @param unknown $imageinfo* @return unknown*/
private function SaveNewImage($newimg,$newname,$imageinfo){switch ($imageinfo['type']){case 1:
//gif$result=imagegif($newimg,$this->path.$newname);
break;
case 2:
//jpg$result=imagejpeg($newimg,$this->path.$newname);
break;
case 3:
//png$result=imagepng($newimg,$this->path.$newname);
break;
}
imagedestroy($newimg);
return $newname;
}
/**+-----------------------------------------------------------------* 获取水印位置函数+-----------------------------------------------------------------* @param unknown $backinfo背景信息* @param unknown $waterinfo水印信息* @param unknown $waterpos水印位置* @return boolean|multitype:number 返回坐标数组*/
private function getPos($backinfo,$waterinfo,$waterpos) {if ($backinfo['width']
}
switch ($waterpos) {case 1:
//左上角$posX=0;
$posY=0;
break;
case 2:
//中上方$posX=$backinfo['width']-$waterinfo['width']/2;
$posY=0;
break;
case 3:
//右上角$posX=$backinfo['width']-$waterinfo['width'];
$posY=0;
break;
case 4:
//左中方$posX=0;
$posY=$backinfo['height']-$waterinfo['height']/2;
break;
case 5:
//正中间$posX=$backinfo['width']-$waterinfo['width']/2;
$posY=$backinfo['height']-$waterinfo['height']/2;
break;
case 6:
//右中方$posX=$backinfo['width']-$waterinfo['width'];
$posY=$backinfo['height']-$waterinfo['height']/2;
break;
case 7:
//底部靠左$posX=0;
$posY=$backinfo['height']-$waterinfo['height'];
break;
case 8:
//底部居中$posX=$backinfo['width']-$waterinfo['width']/2;
$posY=$backinfo['height']-$waterinfo['height'];
break;
case 9:
//底部靠右$posX=$backinfo['width']-$waterinfo['width'];
$posY=$backinfo['height']-$waterinfo['height'];
break;
case 0:default :$posX=rand(0,$backinfo['width']-$waterinfo['width']);
$posY=rand(0,$backinfo['height']-$waterinfo['height']);
break;
}
return array('posX'=>$posX,'posY'=>$posY);
}
/**+-------------------------------------------------------------------* 拷贝图像+-------------------------------------------------------------------* @param unknown $backimg背景资源* @param unknown $waterimg水印资源* @param unknown $pos水印位置* @param unknown $waterinfo水印信息* @return unknown*/
private function CopyImage($backimg,$waterimg,$pos,$waterinfo) {imagecopy($backimg, $waterimg, $pos['posX'], $pos['posY'], 0, 0, $waterinfo['width'], $waterinfo['height']);
imagedestroy($waterimg);
return $backimg;
}
}
?>
以上就是本文的全部内容,希望对大家学习PHP程序设计有所帮助。