PHP水印类,支持添加图片、文字、填充颜色区域的实现

 更新时间:2017年7月6日 23:50  点击:1637
小编推荐的这篇文章介绍了PHP水印类,支持添加图片、文字、填充颜色区域的实现,非常实用,有兴趣的同学可以参考一下。

*自己整理的一个水印类*

支持添加图片、文字、填充颜色区域

 代码如下 复制代码

<?php

/**

 * 图片加水印类,支持文字水印、透明度设置、自定义水印位置等。

 * 使用示例:

 *   $obj = new WaterMask($imgFileName);       //实例化对象

 *   $obj->$waterType = 1;           //类型:0为文字水印、1为图片水印

 *   $obj->$transparent = 45;         //水印透明度

 *   $obj->$waterStr = 'icp.niufee.com';        //水印文字

 *   $obj->$fontSize = 18;           //文字字体大小

 *   $obj->$fontColor = array(255,255,255);        //水印文字颜色(RGB)

 *   $obj->$fontFile = 'AHGBold.ttf';       //字体文件

 *   &hellip;&hellip;

 *   $obj->output();              //输出水印图片文件覆盖到输入的图片文件

 * @modify liuzp111

 */

classWaterMask{

  public$waterTypeImage  = false;               //水印类型:启用图片水印

  public$waterTypeStr   = false;         //水印类型:启用文字水印

  public$pos       = 0;         //水印位置

  public$transparent   = 45;        //水印透明度(0---100)数值越大越不透明

 

  public$waterStr     ='icp.niufee.com';     //水印文字

  public$fontSize     = 14;        //文字字体大小

  public$fontColor    =array(0,0,0);         //水印文字颜色(RGB) 默认黑色

  public$fontFile     ='./font/simfang.ttf';     //字体文件

 

  public$waterImg     ='logo.png';      //水印图片

 

  private$srcImg      ='';        //需要添加水印的图片

  private$im        ='';        //图片句柄

  private$water_im     ='';        //水印图片句柄

  private$srcImg_info   ='';        //图片信息

  private$waterImg_info  ='';        //水印图片信息

  private$str_w      ='';        //水印文字宽度

  private$str_h      ='';        //水印文字高度

  private$x        ='';        //水印X坐标

  private$y        ='';        //水印y坐标

  public$output_img    ='';                 //存储输出图片到哪里

  public$is_draw_rectangle= false;                 //是否绘制矩形区域 (暂不支持自定义位置)

  //public $rectange_color   = '';                  //绘制矩形区域的颜色 

  private$result_array   =array();              //结果数组

  publicfunction__construct($img) {   //析构函数

    //$this->srcImg = file_exists($img) ? $img : die('"'.$img.'" 源文件不存在!');

    if(file_exists($img)){

      $this->srcImg =$img;

    }else{

      returnarray('data'=>'','info'=>'源文件不存在!','status'=>0);

    }

  }

 

  privatefunctionimginfo() { //获取需要添加水印的图片的信息,并载入图片。

    $this->srcImg_info =getimagesize($this->srcImg);

    switch($this->srcImg_info[2]) {

      case3:

        $this->im = imagecreatefrompng($this->srcImg);

        break1;

      case2:

        $this->im = imagecreatefromjpeg($this->srcImg);

        break1;

      case1:

        $this->im = imagecreatefromgif($this->srcImg);

        break1;

      default:

        //die('原图片('.$this->srcImg.')格式不对,只支持PNG、JPEG、GIF。');

        returnarray('data'=>'','info'=>'原图片('.$this->srcImg.')格式不对,只支持PNG、JPEG、GIF。','status'=>0);

    }

  }

 

  privatefunctionwaterimginfo() { //获取水印图片的信息,并载入图片。

    $this->waterImg_info =getimagesize($this->waterImg);

    switch($this->waterImg_info[2]) {

      case3:

        $this->water_im = imagecreatefrompng($this->waterImg);

        break1;

      case2:

        $this->water_im = imagecreatefromjpeg($this->waterImg);

        break1;

      case1:

        $this->water_im = imagecreatefromgif($this->waterImg);

        break1;

      default:

        //die('水印图片('.$this->srcImg.')格式不对,只支持PNG、JPEG、GIF。');

         returnarray('data'=>'','info'=>'水印图片('.$this->srcImg.')格式不对,只支持PNG、JPEG、GIF。','status'=>0);

    }

  }

  privatefunctionwaterpos() { //水印位置算法

    switch($this->pos) {

      case0:  //随机位置

        $this->x = rand(0,$this->srcImg_info[0]-$this->waterImg_info[0]);

        $this->y = rand(0,$this->srcImg_info[1]-$this->waterImg_info[1]);

        break1;

      case1:  //上左

        $this->x = 0;

        $this->y = 0;

        break1;

      case2:  //上中

        $this->x = ($this->srcImg_info[0]-$this->waterImg_info[0])/2;

        $this->y = 0;

        break1;

      case3:  //上右

        $this->x =$this->srcImg_info[0]-$this->waterImg_info[0];

        $this->y = 0;

        break1;

      case4:  //中左

        $this->x = 0;

        $this->y = ($this->srcImg_info[1]-$this->waterImg_info[1])/2;

        break1;

      case5:  //中中

        $this->x = ($this->srcImg_info[0]-$this->waterImg_info[0])/2;

        $this->y = ($this->srcImg_info[1]-$this->waterImg_info[1])/2;

        break1;

      case6:  //中右

        $this->x =$this->srcImg_info[0]-$this->waterImg_info[0];

        $this->y = ($this->srcImg_info[1]-$this->waterImg_info[1])/2;

        break1;

      case7:  //下左

        $this->x = 0;

        $this->y =$this->srcImg_info[1]-$this->waterImg_info[1];

        break1;

      case8:  //下中

        $this->x = ($this->srcImg_info[0]-$this->waterImg_info[0])/2;

        $this->y =$this->srcImg_info[1]-$this->waterImg_info[1];

        break1;

      case9:  //下中偏上100px

        $this->x = ($this->srcImg_info[0]-$this->waterImg_info[0])/2;

        $this->y =$this->srcImg_info[1]-$this->waterImg_info[1] - 100;

        break1;

      default: //下右

        $this->x =$this->srcImg_info[0]-$this->waterImg_info[0];

        $this->y =$this->srcImg_info[1]-$this->waterImg_info[1];

        break1;

    }

  }

  /**

   * 水印文字图片位置,根据需求调整

   */

  privatefunctionwaterposStr() {

    $this->x = ($this->srcImg_info[0]-$this->waterImg_info[0])/2;

    $this->y =$this->srcImg_info[1]-$this->waterImg_info[1] - 3;   

  }

  privatefunctionwaterimg($type='') {

    if($this->srcImg_info[0] <=$this->waterImg_info[0] ||$this->srcImg_info[1] <=$this->waterImg_info[1]){

      //die('水印比原图大!');

      returnarray('data'=>'','info'=>'水印比原图大!','status'=>0);

    }

    if($type=='waterstr'){

      $this->waterposStr();

    }else{

      $this->waterpos();

    }

    $cut= imagecreatetruecolor($this->waterImg_info[0],$this->waterImg_info[1]);

    imagecopy($cut,$this->im,0,0,$this->x,$this->y,$this->waterImg_info[0],$this->waterImg_info[1]);

    $pct=$this->transparent;

    imagecopy($cut,$this->water_im,0,0,0,0,$this->waterImg_info[0],$this->waterImg_info[1]);

    imagecopymerge($this->im,$cut,$this->x,$this->y,0,0,$this->waterImg_info[0],$this->waterImg_info[1],$pct);

  }

 

  privatefunctionwaterstr() {

    $rect= imagettfbbox($this->fontSize,0,$this->fontFile,$this->waterStr);

    $w=abs($rect[2]-$rect[6]);

    $h=abs($rect[3]-$rect[7]);

    $fontHeight=$this->fontSize;

    $this->water_im = imagecreatetruecolor($w,$h);

    imagealphablending($this->water_im,false);

    imagesavealpha($this->water_im,true);

    $white_alpha= imagecolorallocatealpha($this->water_im,255,255,255,127);

    imagefill($this->water_im,0,0,$white_alpha);

    $color= imagecolorallocate($this->water_im,$this->fontColor[0],$this->fontColor[1],$this->fontColor[2]);

    imagettftext($this->water_im,$this->fontSize,0,0,$this->fontSize,$color,$this->fontFile,$this->waterStr);

    $this->waterImg_info =array(0=>$w,1=>$h);

    $this->waterimg($type='waterstr');

  }

  /**

   * 绘制矩形区

   * bool imagefilledrectangle ( resource $image , int $x1 , int $y1 , int $x2 , int $y2 , int $color )

   * bool imagerectangle ( resource $image , int $x1 , int $y1 , int $x2 , int $y2 , int $col )

   * @author liuzp111

   */

  publicfunctiondrawRectangle()

  {

    //imagefill($im,0,0,$gray);//填充资源,填充的坐标(类似PS魔棒),颜色

    /*

     *  1--------------画长方形--------------

     *  bool imagerectangle ( resource $image , int $x1 , int $y1 , int $x2 , int $y2 , int $col )

     *  参数: 画布资源, 左上角x坐标,左上y坐标,右下x坐标,右下y坐标,颜色

     */

    $color= imagecolorallocate($this->im,255,255,255);//创建矩形边框颜色和填充颜色

    //=========================================================================

    //绘制矩形区域并填充

    // 参数说明:

    //bool imagefilledrectangle ( resource $image , int $x1 , int $y1 , int $x2 , int $y2 , int $color )

    // im:为将图像载入为图像资源

    // $x1:表示矩形左上角的X坐标

    // $y1:表示矩形左上角的Y坐标

    // $x2:表示矩形右下角的X坐标

    // $y2:表示矩形右下角的Y坐标

    // $color:为填充的RGB颜色

    //

    imagefilledrectangle($this->im,3,$this->srcImg_info[1] - 20,$this->srcImg_info[0]-3,$this->srcImg_info[1]-3,$color);

    //不要使用下方的函数填充,下方填充函数为魔棒填充,容易导致填充不完整

    //imagefill($this->im,$this->srcImg_info[0]/2,$this->srcImg_info[1]-8,$color);//填充资源,填充的坐标(魔棒),颜色

 

  }

  functionoutput() {

    $this->imginfo();

    //是否创建矩形区域

    if($this->is_draw_rectangle){

      $this->drawRectangle();

    }

    if($this->waterTypeStr ) {

      $this->waterstr();

    }

    if($this->waterTypeImage )

    {

      $this->waterimginfo();

      $this->waterimg();

    }

    switch($this->srcImg_info[2]) {

      case3:

        $res_output= imagepng($this->im,$this->output_img);

        break1;

      case2:

        $res_output= imagejpeg($this->im,$this->output_img);

        break1;

      case1:

        $res_output= imagegif($this->im,$this->output_img);

        break1;

      default:

        // die('添加水印失败!');

        returnarray('data'=>'','info'=>'添加水印失败!','status'=>0);

        break;

    }

    imagedestroy($this->im);

    imagedestroy($this->water_im);

    returnarray('data'=>$res_output,'info'=>'添加水印成功!','status'=>1);

  }

}

使用方式:

 代码如下 复制代码

$file='58368dddc8c51_22';//需要加水印的图片

$file_ext='.jpeg';//扩展名

$imgFileName='./'.$file.$file_ext;//需要加水印图片路径

$obj=newWaterMask($imgFileName);//实例化对象

$obj->waterTypeStr = true;    //开启文字水印     

$obj->waterTypeImage = true;   //开启图片水印 

$obj->pos = 9;        //定义水印图片位置

$obj->waterImg ='./water.png';     //水印图片    

$obj->transparent = 100;         //水印透明度

$obj->waterStr ='保险经纪人:刘测试 电话:02052552';      //水印文字

$obj->fontSize = 9;           //文字字体大小

$obj->fontColor =array(0,0,0);       //水印文字颜色(RGB)

$obj->fontFile ='./font/msyh.ttc';   //字体文件,这里是微软雅黑

$obj->is_draw_rectangle = TRUE;     //开启绘制矩形区域

$obj->output_img ='./'.$file.'_n'.$file_ext;//输出的图片路径

$obj->output(); 

小编推荐的这篇文章介绍了php基于dom实现读取图书xml格式数据的方法,非常实用,有兴趣的同学快来看看吧。

本文实例讲述了php基于dom实现读取图书xml格式数据的方法。分享给大家供大家参考,具体如下:

 代码如下 复制代码

<?php

 $doc=newDOMDocument();

 $doc->load('books.xml');

 $books=$doc->getElementsByTagName("book");

 foreach($booksas$book)

 {

 $authors=$book->getElementsByTagName("author");

 $author=$authors->item(0)->nodeValue;

 $publishers=$book->getElementsByTagName("publisher");

 $publisher=$publishers->item(0)->nodeValue;

 $titles=$book->getElementsByTagName("title");

 $title=$titles->item(0)->nodeValue;

 echo"$title - $author - $publisher\n";

 }

?>

books.xml文件如下:

 代码如下 复制代码

<?xmlversion="1.0"?>

<books>

 <book>

  <author>Jack Herrington</author>

  <title>PHP Hacks</title>

  <publisher>O'Reilly</publisher>

 </book>

 <book>

  <author>Jack Herrington</author>

  <title>Podcasting Hacks</title>

  <publisher>O'Reilly</publisher>

 </book>

</books>

运行结果如下:

PHP Hacks - Jack Herrington - O'Reilly

Podcasting Hacks - Jack Herrington - O'Reilly

小编推荐的这篇文章介绍了php基于dom实现的图书xml格式数据示例,非常实用,有兴趣的同学快来看看吧。
 代码如下 复制代码

<?php

 $books=array();

 $books[] =array(

 'title'=>'PHP Hacks',

 'author'=>'Jack Herrington',

 'publisher'=>"O'Reilly"

 );

 $books[] =array(

 'title'=>'Podcasting Hacks',

 'author'=>'Jack Herrington',

 'publisher'=>"O'Reilly"

 );

 $doc=newDOMDocument();

 $doc->formatOutput = true;

 $r=$doc->createElement("books");

 $doc->appendChild($r);

 foreach($booksas$book)

 {

 $b=$doc->createElement("book");

 $author=$doc->createElement("author");

 $author->appendChild(

 $doc->createTextNode($book['author'] )

 );

 $b->appendChild($author);

 $title=$doc->createElement("title");

 $title->appendChild(

 $doc->createTextNode($book['title'] )

 );

 $b->appendChild($title);

 $publisher=$doc->createElement("publisher");

 $publisher->appendChild(

 $doc->createTextNode($book['publisher'] )

 );

 $b->appendChild($publisher);

 $r->appendChild($b);

 }

 echo$doc->saveXML();

?>

运行结果如下:

 代码如下 复制代码

<?xmlversion="1.0"?>

<books>

 <book>

  <author>Jack Herrington</author>

  <title>PHP Hacks</title>

  <publisher>O'Reilly</publisher>

 </book>

 <book>

  <author>Jack Herrington</author>

  <title>Podcasting Hacks</title>

  <publisher>O'Reilly</publisher>

 </book>

</books>

本文介绍了php获取客户端IP及URL的方法,涉及php预定义服务器变量$_SERVER相关使用技巧,对初学php的同学来说很有用。不懂的同学可以参考一下本文。

本文实例讲述了php获取客户端IP及URL的方法。分享给大家供大家参考,具体如下:

 代码如下复制代码

functiongetonlineip(){//获取用户ip

  if($_SERVER['HTTP_CLIENT_IP'])

  {

   $onlineip=$_SERVER['HTTP_CLIENT_IP'];//用户IP

  }

  elseif($_SERVER['HTTP_X_FORWARDED_FOR'])

  {

   $onlineip=$_SERVER['HTTP_X_FORWARDED_FOR'];//代理IP

  }

  else

  {

   $onlineip=$_SERVER['REMOTE_ADDR'];//服务器IP

  }

  return$onlineip;

}

functioncurPageURL()//获取完整的url

{

  $pageURL='http'

  if($_SERVER["HTTPS"] =="on")

  {

   $pageURL.="s";

  }

  $pageURL.="://";

  if($_SERVER["SERVER_PORT"] !="80")

  {

   $pageURL.=$_SERVER["SERVER_NAME"] .":".$_SERVER["SERVER_PORT"] .$_SERVER["REQUEST_URI"];

  }

  else

  {

   $pageURL.=$_SERVER["SERVER_NAME"] .$_SERVER["REQUEST_URI"];

  }

  return$pageURL;

}

[!--infotagslink--]

相关文章

  • 使用PHP+JavaScript将HTML页面转换为图片的实例分享

    这篇文章主要介绍了使用PHP+JavaScript将HTML元素转换为图片的实例分享,文后结果的截图只能体现出替换的字体,也不能说将静态页面转为图片可以加快加载,只是这种做法比较interesting XD需要的朋友可以参考下...2016-04-19
  • C#从数据库读取图片并保存的两种方法

    这篇文章主要介绍了C#从数据库读取图片并保存的方法,帮助大家更好的理解和使用c#,感兴趣的朋友可以了解下...2021-01-16
  • Python 图片转数组,二进制互转操作

    这篇文章主要介绍了Python 图片转数组,二进制互转操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-03-09
  • Photoshop古装美女图片转为工笔画效果制作教程

    今天小编在这里就来给各位Photoshop的这一款软件的使用者们来说说把古装美女图片转为细腻的工笔画效果的制作教程,各位想知道方法的使用者们,那么下面就快来跟着小编一...2016-09-14
  • php抓取网站图片并保存的实现方法

    php如何实现抓取网页图片,相较于手动的粘贴复制,使用小程序要方便快捷多了,喜欢编程的人总会喜欢制作一些简单有用的小软件,最近就参考了网上一个php抓取图片代码,封装了一个php远程抓取图片的类,测试了一下,效果还不错分享...2015-10-30
  • jquery左右滚动焦点图banner图片鼠标经过显示上下页按钮

    jquery左右滚动焦点图banner图片鼠标经过显示上下页按钮...2013-10-13
  • 利用JS实现点击按钮后图片自动切换的简单方法

    下面小编就为大家带来一篇利用JS实现点击按钮后图片自动切换的简单方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2016-10-25
  • Photoshop枪战电影海报图片制作教程

    Photoshop的这一款软件小编相信很多的人都已经是使用过了吧,那么今天小编在这里就给大家带来了用Photoshop软件制作枪战电影海报的教程,想知道制作步骤的玩家们,那么下面...2016-09-14
  • python opencv通过4坐标剪裁图片

    图片剪裁是常用的方法,那么如何通过4坐标剪裁图片,本文就详细的来介绍一下,感兴趣的小伙伴们可以参考一下...2021-06-04
  • 使用PHP下载CSS文件中的图片的代码

    共享一段使用PHP下载CSS文件中的图片的代码 复制代码 代码如下: <?php //note 设置PHP超时时间 set_time_limit(0); //note 取得样式文件内容 $styleFileContent = file_get_contents('images/style.css'); //not...2013-10-04
  • PHP swfupload图片上传的实例代码

    PHP代码如下:复制代码 代码如下:if (isset($_FILES["Filedata"]) || !is_uploaded_file($_FILES["Filedata"]["tmp_name"]) || $_FILES["Filedata"]["error"] != 0) { $upload_file = $_FILES['Filedata']; $fil...2013-10-04
  • C#中图片旋转和翻转(RotateFlipType)用法分析

    这篇文章主要介绍了C#中图片旋转和翻转(RotateFlipType)用法,实例分析了C#图片旋转及翻转Image.RotateFlip方法属性的常用设置技巧,需要的朋友可以参考下...2020-06-25
  • OpenCV如何去除图片中的阴影的实现

    这篇文章主要介绍了OpenCV如何去除图片中的阴影的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-03-29
  • js实现上传图片及时预览

    这篇文章主要为大家详细介绍了js实现上传图片及时预览的相关资料,具有一定的参考价值,感兴趣的朋友可以参考一下...2016-05-09
  • ps怎么制作图片阴影效果

    ps软件是现在很多人比较喜欢的,有着非常不错的使用效果,这次文章就给大家介绍下ps怎么制作图片阴影效果,还不知道制作方法的赶紧来看看。 ps图片阴影效果怎么做方法/...2017-07-06
  • C#将图片和字节流互相转换并显示到页面上

    本文主要介绍用C#实现图片转换成字节流,字节流转换成图片,并根据图片路径返回图片的字节流,有需要的朋友可以参考下...2020-06-25
  • 微信小程序如何获取图片宽度与高度

    这篇文章主要给大家介绍了关于微信小程序如何获取图片宽度与高度的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-03-10
  • JavaScript 如何禁止用户保存图片

    这篇文章主要介绍了JavaScript 如何禁止用户保存图片,帮助大家完成需求,更好的理解和使用JavaScript,感兴趣的朋友可以了解下...2020-11-19
  • JavaScript实现颜色查看器

    这篇文章主要为大家详细介绍了JavaScript实现颜色查看器,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-04-13
  • php上传图片学习笔记与心得

    我们在php中上传文件就必须使用#_FILE变量了,这个自动全局变量 $_FILES 从 PHP 4.1.0 版本开始被支持。在这之前,从 4.0.0 版本开始,PHP 支持 $HTTP_POST_FILES 数组。这...2016-11-25