PHP图片水印类的封装
封装PHP的图片水印的类,供大家参考,具体内容如下
water('2a.jpg','logo.gif',0);
classImage{
//路径
protected$path;
//是否启用随机名字
protected$isRandName;
//要保存的图像类型
protected$type;
//通过构造方法队成员属性进行初始化
function__construct($path='./',$isRandName=true,$type='png'){
$this->path=$path;
$this->isRandName=$isRandName;
$this->type=$type;
}
//对外公开的水印方法
/**
*@paramchar$image原图
*@paramchar$water水印图片
*@paramchar$postion位置
*@paramint$tmp透明度
*@paramchar$prefix前缀
*/
functionwater($image,$water,$postion,$tmp=100,$prefix='water_'){
//判断这两个图片是否存在
if(!file_exists($image)||!file_exists($water)){
die('图片资源不存在');
}
//得到原图和水印图片的宽高
$imageInfo=self::getImageInfo($image);
$waterInfo=self::getImageInfo($water);
//判断水印图片是否能贴上来
if(!$this->checkImage($imageInfo,$waterInfo)){
die('水印图片太大');
}
//打开图片
$imageRes=self::openAnyImage($image);
$waterRes=self::openAnyImage($water);
//根据水印图片的位置计算水印图片的坐标
$pos=$this->getPosition($postion,$imageInfo,$waterInfo);
//将水印图片贴过来
imagecopymerge($imageRes,$waterRes,$pos['x'],$pos['y'],0,0,$waterInfo["width"],$waterInfo["height"],$tmp);
//得到要保存图片的文件名
$newName=$this->createNewName($image,$prefix);
//得到保存图片的路径,也就是文件的全路径
$newPath=rtrim($this->path,'/').'/'.$newName;
//保存图片
$this->saveImage($imageRes,$newPath);
//销毁资源
imagedestroy($imageRes);
imagedestroy($waterRes);
//返回路径
return$newPath;
}
//保存图像资源
protectedfunctionsaveImage($imageRes,$newPath){
$func='image'.$this->type;
//通过变量函数进行保存
$func($imageRes,$newPath);
}
//得到文件名函数
protectedfunctioncreateNewName($imagePath,$prefix){
if($this->isRandName){
$name=$prefix.uniqid().'.'.$this->type;
}else{
$name=$prefix.pathinfo($imagePath)['filename'].'.'.$this->type;
}
return$name;
}
//根据位置计算水印图片的坐标
protectedfunctiongetPosition($postion,$imageInfo,$waterInfo){
switch($postion){
case1:
$x=0;
$y=0;
break;
case2:
$x=($imageInfo['width']-$waterInfo["width"])/2;
$y=0;
break;
case3:
$x=$imageInfo["width"]-$waterInfo["width"];
$y=0;
break;
case4:
$x=0;
$y=($imageInfo["height"]-$waterInfo["height"])/2;
break;
case5:
$x=($imageInfo['width']-$waterInfo["width"])/2;
$y=($imageInfo["height"]-$waterInfo["height"])/2;
break;
case6:
$x=$imageInfo["width"]-$waterInfo["width"];
$y=($imageInfo["height"]-$waterInfo["height"])/2;
break;
case7:
$x=0;
$y=$imageInfo['height']-$waterInfo["height"];
break;
case8:
$x=($imageInfo['width']-$waterInfo["width"])/2;
$y=$imageInfo['height']-$waterInfo["height"];
break;
case9:
$x=$imageInfo["width"]-$waterInfo["width"];
$y=$imageInfo['height']-$waterInfo["height"];
break;
case0:
$x=mt_rand(0,$imageInfo["width"]-$waterInfo["width"]);
$y=mt_rand(0,$imageInfo['height']-$waterInfo["height"]);
break;
}
return['x'=>$x,'y'=>$y];
}
protectedfunctioncheckImage($imageInfo,$waterInfo){
if(($waterInfo['width']>$imageInfo['width'])||($waterInfo['height']>$imageInfo['height'])){
returnfalse;
}
returntrue;
}
//静态方法。根据图片的路径得到图片的信息,宽度,高度、mime类型
staticfunctiongetImageInfo($imagePath){
$info=getimagesize($imagePath);
$data['width']=$info[0];
$data['height']=$info[1];
$data['mime']=$info['mime'];
return$data;
}
staticfunctionopenAnyImage($imagePath){
//得到图像的mime类型
$mime=self::getImageInfo($imagePath)['mime'];
//根据不同的mime类型打开不同的图像
switch($mime){
case'image/png':
$image=imagecreatefrompng($imagePath);
break;
case'image/gif':
$image=imagecreatefromgif($imagePath);
break;
case'image/jpeg':
$image=imagecreatefromjpeg($imagePath);
break;
case'image/wbmp':
$image=imagecreatefromwbmp($imagePath);
break;
}
return$image;
}
}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。