加入收藏 | 设为首页 | 会员中心 | 我要投稿 鹰潭站长网 (https://www.0701zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

PHP图片水印类的封装

发布时间:2021-02-05 21:03:33 所属栏目:PHP教程 来源:网络整理
导读:封装PHP的图片水印的类,供大家参考,具体内容如下 water('2a.jpg','logo.gif',0);class Image{ //路径 protected $path; //是否启用随机名字 protected $isRandName; //要保存的图像类型 protected $type; //通过构造方法队成员属性进行初始化 function __c

封装PHP的图片水印的类,供大家参考,具体内容如下

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'],$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,$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;
}

}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程之家。

(编辑:鹰潭站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读