"; prin">
 | 注册
请输入搜索内容

热门搜索

Java Linux MySQL PHP JavaScript Hibernate jQuery Nginx
lpki123
10年前发布

PHP图片添加水印

一共有3个文件:

1、functions.php
2、water.config.php
3、water.class.php
 
代码如下: 
functions.php
<?php    /*   *    */  //获得数据库模型的对象  function M($table){          return new Model($table);  }  //打印信息  function p($msg){   echo "<pre>";   print_r($msg);   echo "</pre>";  }  //提示错误信息  function error($msg){          echo "<div align='center' style='border:solid 3px #dcdcdc;padding:20px;margin:0 auto;'>          $msg          </div>";          exit;  }  //自动加载类文件  function __autoload($className){          if(strlen($className)>7 && substr($className,-7) == 'Control'){                  $classFile = PATH_APP.'/control/'.$className.'.php';          }else{                  $classFile = PATH_XL.'/libs/bin/'.$className.'.class.php';          }          if(!is_file($classFile)){                  exit($classFile."文件不存在");          }          include $classFile;  }  //加载、设置配置项  function C($name=null,$value=null){          static $config =array();          if(is_array($name)){                  $config = array_merge($config,array_change_key_case($name));          }          if(is_string($name)){                  $name = strtolower($name);                  if(!is_null($value)){                          $congfig[$name]=$value;                          return true;                  }                  return isset($config[$name])?$config[$name]:null;          }          if(is_null($name)){                  return $config;          }  }  //加载、设置字体  function L($name=null,$value=null){          static $lang = array();          if(is_array($name)){                  $lang  = array_merge($lang,array_change_key_case($name));          }          if(is_string($name)){                  $name = strtolower($name);                  if(!is_null($value)){                          $lang[$name]=$value;                          return true;                  }                  return isset($lang[$name])?$lang[$name]:null;          }          if(is_null($name)){                  return $lang;          }  }  //获得文件、文件夹的大小  function getsize($path,$type=null){          if(is_file($path)) return filesize($path);          $type = is_null($type)?"*":"*.$type";          $files = glob($path.'/'.$type);          $size = 0;          foreach($files as $f){                  $size+=is_dir($f)?getsize($f):filesize($f);          }          return $size;  }  ?>

water.config.php
<?php  return array(    //水印处理配置项     'water_img' => 'water.jpg',//水印图片     'water_pos' => '9',//水印位置  取值范围:1-9    /* 1-9的位置分别为    ↖  ↑  ↗    ←  ·  →    ↙  ↓  ↘   */     'water_pct' => 60,//水印透明度  取值范围:0-100  (值越大、水印越清晰)  );  ?>

water.class.php
<?php  include "functions.php";//加载小工具函数  C(include "water.config.php");//读取水印类配置项  //水印处理类  class waterd{   public $water_pos='';//水印位置   public $water_pct='';//水印透明度   private $res;//图像资源   //构造函数   function __construct($pos=null,$pct=null){    $this->water_pos = is_null($pos)?C('water_pos'):$pos;    $this->water_pct = is_null($pct)?C('water_pct'):$pct;   }   //添加水印方法   public function water($img){    //检测    if(!$this->check($img)){     return false;    }    //水印图片资源    $water_res = $this -> getres(C('water_img'));    //原始图片资源    $img_res = $this -> getres($img);    //水印位置    $posArr = $this -> getpos($img_res,$water_res);    imagecopymerge($img_res,$water_res,$posArr[0],$posArr[1],0,0,imagesx($water_res),imagesy($water_res),$this->water_pct);    $info = getimagesize($img);    //打印图片信息 测试时可开启当前打印 p($info);    $func = str_replace('/','',$info['mime']);    $func($img_res,$img);   }   //检测   private function check($img){    return is_file($img) && extension_loaded('GD') &&  getimagesize($img);   }   //获得图片资源   private function getres($img){    $info = getimagesize($img);    $type = trim(image_type_to_extension($info[2]),'.');    $func = 'imagecreatefrom'.$type;    return $func($img);   }   //获得水印位置   private function getpos($img_res,$water_res){    $img_x = imagesx($img_res);//原图宽度    $img_y = imagesy($img_res);//原图宽度    $water_x = imagesx($water_res);//水印宽度    $water_y = imagesy($water_res);//水印宽度    $pos = $this -> water_pos;//水印位置    $x=15;$y=15;    switch($pos){     case 1:      break;     case 2:      $x = ($img_x-$water_x)/2;      break;     case 3:      $x = $img_x-$water_x-15;      break;     case 4:      $y = ($img_y-$water_y)/2;      break;     case 5:      $x = ($img_x-$water_x)/2;      $y = ($img_y-$water_y)/2;      break;     case 6:      $x = $img_x-$water_x-15;      $y = ($img_y-$water_y)/2;      break;     case 7:      $y = $img_y-$water_y-15;      break;     case 8:      $x = ($img_x-$water_x)/2;      $y = $img_y-$water_y-15;      break;     case 9:      $x = $img_x-$water_x-15;      $y = $img_y-$water_y-15;      break;    }    return array($x,$y);   }    }  //new一个对象然后 调用 水印的方法 water()即可、传进要添加水印的图片即可  $x = new waterd();  $x->water('img.jpg');    ?>