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'); ?>