PHP水印文件结构:
water.php
<?php
//水印函数封装
/*
*
*@param $dstSource大图资源
*@param $srcSource小图资源
*@param $position 位置
*@param $alpha 透明度
*@param $imgType 图片类型
*@param $path 图片路径,在image文件夹下
*@param $isRandName 是否以任意名字命名
*/
function water($dstSource,$srcSource,$position=1,$alpha=20,$imgType='jpeg',$path='./image',$isRandName=true) {
$position=mt_rand(1,9);
//通过路径,打开大图资源
$dst=open($dstSource);
//通过路径,打开小图资源
$src=open($srcSource);
//获取图片信息,算出图片位置
//getimagesize() 函数用于获取图像大小及相关信息,成功返回一个数组
//大图信息
$dstInfo=getimagesize($dstSource);
//小图信息
$srcInfo=getimagesize($srcSource);
switch($position) {
case 1:
$x=0;
$y=0;
break;
case 2:
$x=($dstInfo[0]-$srcInfo[0])/2;
$y=0;
break;
case 3:
$x=$dstInfo[0]-$srcInfo[0];
$y=0;
break;
case 4:
$x=0;
$y=($dstInfo[1]-$srcInfo[1])/2;
break;
case 5:
$x=($dstInfo[0]-$srcInfo[0])/2;
$y=($dstInfo[1]-$srcInfo[1])/2;
break;
case 6:
$x=$dstInfo[0]-$srcInfo[0];
$y=($dstInfo[1]-$srcInfo[1])/2;
break;
case 7:
$x=0;
$y=$dstInfo[1]-$srcInfo[1];
break;
case 8:
$x=($dstInfo[0]-$srcInfo[0])/2;
$y=$dstInfo[1]-$srcInfo[1];
break;
case 9:
$x=$dstInfo[0]-$srcInfo[0];
$y=$dstInfo[1]-$srcInfo[1];
break;
//如果传入的参数不属于以上范围的话,执行下面的语句
default:
$x=mt_rand(0,$dstInfo[0]-$srcInfo[0]);
$y=mt_rand(0,$dstInfo[1]-$srcInfo[1]);
break;
}
//开始合并
//拷贝并合并图像的一部分
//打开的大图资源,打开的小图资源,在大图x,在大图y的位置
//从小图的x,y处开始,小图的宽高,透明度
imagecopymerge($dst,$src,$x,$y,0,0,$srcInfo[0],$srcInfo[1],$alpha);
//imagepng() 将 GD 图像流(image)以 PNG 格式输出到标准输出(通常为浏览器),
//或者如果用 filename 给出了文件名则将其输出到该文件
//拼接函数imagepng($image);
$func='image'.$imgType;
//是否随机文件名
if($isRandName) {
$name=uniqid().'.'.$imgType; //1.jpg asdasswerwr.jpeg
}else {
//pathinfo — 返回文件路径的信息
$pathinfo=pathinfo($dstSource); // 由mn.jpg 得到 'mn'
//var_dump($pathinfo['filename']);
$name=$pathinfo['filename'].'.'.$imgType; //'mn.jpeg'
//var_dump($name);
}
//处理文件夹
//var_dump($path); './image'
$path=trim($path,'/').'/'.$name;
//var_dump($path); './image/mn.jpeg'
//imagepng($image);
//将gd图片流以png的方式输出到 $path路径下
$func($dst,$path);
//销毁资源
imagedestroy($dst);
imagedestroy($src);
return $path;
}
//封装打开函数
function open($path) {
//测试打印$path
//var_dump($path);
//得到传入的大图路径和小图路径
//判断传入的大图,小图路径是否存在
//file_exists() 函数检查文件或目录是否存在。
if(!file_exists($path)) {
exit('图片不存在');
}
//getimagesize() 函数用于获取图像大小及相关信息,成功返回一个数组
$info=getimagesize($path);
//测试打印$info,结果如下
//var_dump($info);
/*
array (size=6)
0 => int 1648
1 => int 1028
2 => int 3
3 => string 'width="1648" height="1028"' (length=26)
'bits' => int 8
'mime' => string 'image/png' (length=9)
*/
//根据mime类型创建新图像
switch ($info['mime']) {
case 'image/jpeg':
case 'image/jpg':
case 'image/pjpg':
//imagecreatefromjpeg()有文件或url创建一个新图像
$res=imagecreatefromjpeg($path);
break;
case 'image/png':
$res=imagecreatefrompng($path);
break;
case 'image/gif':
$res=imagecreatefromgif($path);
break;
case 'image/wbmp':
$res=imagecreatefromwbmp($path);
break;
}
//测试打印新建的图片
//var_dump($res); 结果-> resource(4, gd) resource(7, gd)
//返回根据mime类型创建的新图像
return $res;
}
//传入大图路径,小图路径
water('./mn.png','./mn.jpg');