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 "
"; 
	print_r($msg); 
	echo "

";
}
//提示错误信息
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'); 
 
?>

原创文章,作者:奋斗,如若转载,请注明出处:https://blog.ytso.com/tech/pnotes/8637.html

(0)
上一篇 2021年7月18日 22:06
下一篇 2021年7月18日 22:06

相关推荐

发表回复

登录后才能评论