全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

PHP图片水印类的封装

封装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;
  }
  
}

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


# PHP图片水印类  # PHP图片水印  # PHP水印类  # 基于PHP实现生成随机水印图片  # PHP实现随机生成水印图片功能  # 如何使用PHP给图片加水印  # PHP图片添加水印功能示例小结  # php图片添加水印例子  # PHP实现图片加水印功能  # 这两个  # 太大  # 不存在  # 贴上  # 是否能  # 具体内容  # 大家多多  # 是否存在  # png  # true  # char  # param  # function  # isRandName  # __construct  # path  # prefix  # file_exists  # postion  # image 


相关文章: c# 服务器GC和工作站GC的区别和设置  c# 在高并发场景下,委托和接口调用的性能对比  小捣蛋自助建站系统:数据分析与安全设置双核驱动网站优化  建站主机如何选?性能与价格怎样平衡?  如何零基础在云服务器搭建WordPress站点?  如何通过服务器快速搭建网站?完整步骤解析  ,sp开头的版面叫什么?  如何快速生成高效建站系统源代码?  手机网站制作与建设方案,手机网站如何建设?  如何用手机制作网站和网页,手机移动端的网站能制作成中英双语的吗?  在线制作视频网站免费,都有哪些好的动漫网站?  如何通过远程VPS快速搭建个人网站?  已有域名和空间,如何快速搭建网站?  宝塔新建站点报错如何解决?  如何通过建站之星自助学习解决操作问题?  免费网站制作appp,免费制作app哪个平台好?  建站之星体验版:智能建站系统+响应式设计,多端适配快速建站  b2c电商网站制作流程,b2c水平综合的电商平台?  公司网站制作价格怎么算,公司办个官网需要多少钱?  建站主机是什么?如何选择适合的建站主机?  网站制作的方法有哪些,如何将自己制作的网站发布到网上?  mc皮肤壁纸制作器,苹果平板怎么设置自己想要的壁纸我的世界?  如何快速搭建响应式可视化网站?  如何续费美橙建站之星域名及服务?  建站主机与虚拟主机有何区别?如何选择最优方案?  如何挑选优质建站一级代理提升网站排名?  如何快速重置建站主机并恢复默认配置?  深圳网站制作设计招聘,关于服装设计的流行趋势,哪里的资料比较全面?  桂林网站制作公司有哪些,桂林马拉松怎么报名?  如何用搬瓦工VPS快速搭建个人网站?  山东网站制作公司有哪些,山东大源集团官网?  专业公司网站制作公司,用什么语言做企业网站比较好?  广州美橙建站如何快速搭建多端合一网站?  开心动漫网站制作软件下载,十分开心动画为何停播?  网站设计制作书签怎么做,怎样将网页添加到书签/主页书签/桌面?  如何配置支付宝与微信支付功能?  c++怎么实现高并发下的无锁队列_c++ std::atomic原子变量与CAS操作【详解】  建站之星后台搭建步骤解析:模板选择与产品管理实操指南  测试制作网站有哪些,测试性取向的权威测试或者网站?  企业网站制作公司网页,推荐几家专业的天津网站制作公司?  C++如何使用std::optional?(处理可选值)  如何通过商城免费建站系统源码自定义网站主题?  ppt在线制作免费网站推荐,有什么下载免费的ppt模板网站?  如何处理“XML格式不正确”错误 常见XML well-formed问题解决方法  建站中国必看指南:CMS建站系统+手机网站搭建核心技巧解析  电商网站制作多少钱一个,电子商务公司的网站制作费用计入什么科目?  如何自定义建站之星网站的导航菜单样式?  免费网站制作模板下载,除了易企秀之外还有什么H5平台可以制作H5长页面,最好是免费的?  专业网站设计制作公司,如何制作一个企业网站,建设网站的基本步骤有哪些?  建站之星免费模板:自助建站系统与智能响应式一键生成 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。