首页 > 开发 > PHP > 正文

PHP图片水印类的封装

2024-05-04 22:46:41
字体:
来源:转载
供稿:网友

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

<?phpheader('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;  }  }            
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表