威凡网全力打造:网页编程、软件开发编程、平面设计、服务器端开发、操作系统等在线学习平台!学编程,上威凡网!
PHP教程>> PHP基础 PHP技巧 PHP实例 PHP文摘 PHP模板 PHP总结
当前位置:首页 > PHP教程 > PHP实例
上一节 下一节
 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;
  }
  
}

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


申明:本教程内容由威凡网编辑整理并提供IT程序员分享学习,如文中有侵权行为,请与站长联系(QQ:254677821)!
上一节 下一节
相关教程  
其他教程  
PHP基础
PHP技巧
PHP实例
PHP文摘
PHP模板
PHP总结

违法和不良信息举报中心】邮箱:254677821@qq.com
Copyright©威凡网 版权所有 苏ICP备2023020142号
站长QQ:254677821