php添加图片水印类,PHP图片水印类的封装

header('Content-type:text/html;charset=utf8');

$img = new Image();

// $img->water('2a.jpg','logo.gif',0);

class Image{

//路径

protected $path;

//是否启用随机名字

protected $isRandName;

//要保存的图像类型

protected $type;

//通过构造方法队成员属性进行初始化

function __construct($path='./',$isRandName=true,$type='png'){

$this->path = $path;

$this->isRandName = $isRandName;

$this->type = $type;

}

//对外公开的水印方法

/**

* @param char $image 原图

* @param char $water 水印图片

* @param char $postion 位置

* @param int $tmp 透明度

* @param char $prefix 前缀

*/

function water($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;

}

//保存图像资源

protected function saveImage($imageRes,$newPath){

$func = 'image'.$this->type;

//通过变量函数进行保存

$func($imageRes,$newPath);

}

//得到文件名函数

protected function createNewName($imagePath,$prefix){

if ($this->isRandName){

$name = $prefix.uniqid().'.'.$this->type;

}else {

$name = $prefix.pathinfo($imagePath)['filename'].'.'.$this->type;

}

return $name;

}

//根据位置计算水印图片的坐标

protected function getPosition($postion,$imageInfo,$waterInfo){

switch ($postion){

case 1:

$x = 0;

$y = 0;

break;

case 2:

$x = ($imageInfo['width']-$waterInfo["width"])/2;

$y = 0;

break;

case 3:

$x = $imageInfo["width"]- $waterInfo["width"];

$y = 0;

break;

case 4:

$x = 0;

$y = ($imageInfo["height"]-$waterInfo["height"])/2;

break;

case 5:

$x = ($imageInfo['width']-$waterInfo["width"])/2;

$y = ($imageInfo["height"]-$waterInfo["height"])/2;

break;

case 6:

$x = $imageInfo["width"]- $waterInfo["width"];

$y = ($imageInfo["height"]-$waterInfo["height"])/2;

break;

case 7:

$x = 0;

$y = $imageInfo['height'] - $waterInfo["height"];

break;

case 8:

$x = ($imageInfo['width']-$waterInfo["width"])/2;

$y = $imageInfo['height'] - $waterInfo["height"];

break;

case 9:

$x = $imageInfo["width"]- $waterInfo["width"];

$y = $imageInfo['height'] - $waterInfo["height"];

break;

case 0:

$x = mt_rand(0, $imageInfo["width"]- $waterInfo["width"]);

$y = mt_rand(0, $imageInfo['height'] - $waterInfo["height"]);

break;

}

return ['x'=>$x , 'y'=>$y];

}

protected function checkImage($imageInfo,$waterInfo){

if (($waterInfo['width'] > $imageInfo['width'])||($waterInfo['height'] > $imageInfo['height'])){

return false;

}

return true;

}

//静态方法。根据图片的路径得到图片的信息,宽度,高度、mime类型

static function getImageInfo($imagePath){

$info = getimagesize($imagePath);

$data['width']=$info[0];

$data['height']=$info[1];

$data['mime'] = $info['mime'];

return $data;

}

static function openAnyImage($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;

}

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值