php实现多张图片上传加水印技巧


Posted in PHP onApril 18, 2013
<?php 
function imageWaterMark($groundImage,$waterPos=0,$waterImage="",$waterText="",$textFont=5,$textColor="#FF0000") 
{ 
$isWaterImage = FALSE; 
$formatMsg = "暂不支持该文件格式,请用图片处理软件将图片转换为GIF、JPG、PNG格式。"; 
//读取水印文件 
if(!empty($waterImage) && file_exists($waterImage)) 
{ 
$isWaterImage = TRUE; 
$water_info = getimagesize($waterImage); //得到的是一个数组 
$water_w = $water_info[0];//取得水印图片的宽 
$water_h = $water_info[1];//取得水印图片的高 
switch($water_info[2])//取得水印图片的格式 
{ 
case 1:$water_im = imagecreatefromgif($waterImage);break; //将图片转化为PHP可识别的编码过程 
case 2:$water_im = imagecreatefromjpeg($waterImage);break; //将图片转化为PHP可识别的编码过程 
case 3:$water_im = imagecreatefrompng($waterImage);break; //将图片转化为PHP可识别的编码过程 
default:die($formatMsg); 
} 
} 
//读取背景图片 
if(!empty($groundImage) && file_exists($groundImage)) 
{ 
$ground_info = getimagesize($groundImage); 
$ground_w = $ground_info[0];//取得背景图片的宽 
$ground_h = $ground_info[1];//取得背景图片的高 
switch($ground_info[2])//取得背景图片的格式 
{ 
case 1:$ground_im = imagecreatefromgif($groundImage);break; 
case 2:$ground_im = imagecreatefromjpeg($groundImage);break; 
case 3:$ground_im = imagecreatefrompng($groundImage);break; 
default:die($formatMsg); 
} 
} 
else 
{ 
die("需要加水印的图片不存在!"); 
} 
//水印位置 
if($isWaterImage)//图片水印 
{ 
$w = $water_w; 
$h = $water_h; 
$label = "图片的"; 
} 
else//文字水印 
{ 
$temp = imagettfbbox(ceil($textFont*2.5),0,"c:/windows/fonts/stcaiyun.ttf",$waterText);//取得使用 TrueType 字体的文本的范围 
$w = $temp[2] - $temp[6]; 
$h = $temp[3] - $temp[7]; 
unset($temp); 
$label = "文字区域"; 
} 
if( ($ground_w<$w) || ($ground_h<$h) ) 
{ 
echo "需要加水印的图片的长度或宽度比水印".$label."还小,无法生成水印!"; 
return; 
} 
switch($waterPos) 
{ 
case 0://随机 
$posX = rand(0,($ground_w - $w)); 
$posY = rand(0,($ground_h - $h)); 
break; 
case 1://1为顶端居左 
$posX = 0; 
$posY = 0; 
break; 
case 2://2为顶端居中 
$posX = ($ground_w - $w) / 2; 
$posY = 0; 
break; 
case 3://3为顶端居右 
$posX = $ground_w - $w; 
$posY = 0; 
break; 
case 4://4为中部居左 
$posX = 0; 
$posY = ($ground_h - $h) / 2; 
break; 
case 5://5为中部居中 
$posX = ($ground_w - $w) / 2; 
$posY = ($ground_h - $h) / 2; 
break; 
case 6://6为中部居右 
$posX = $ground_w - $w; 
$posY = ($ground_h - $h) / 2; 
break; 
case 7://7为底端居左 
$posX = 0; 
$posY = $ground_h - $h; 
break; 
case 8://8为底端居中 
$posX = ($ground_w - $w) / 2; 
$posY = $ground_h - $h; 
break; 
case 9://9为底端居右 
$posX = $ground_w - $w; 
$posY = $ground_h - $h; 
break; 
default://随机 
$posX = rand(0,($ground_w - $w)); 
$posY = rand(0,($ground_h - $h)); 
break; 
} 
//设定图像的混色模式 
imagealphablending($ground_im, true); 
if($isWaterImage)//图片水印 
{ 
imagecopy($ground_im, $water_im, $posX, $posY, 0, 0, $water_w,$water_h);//拷贝水印到目标文件 
} 
else//文字水印 
{ 
if( !empty($textColor) && (strlen($textColor)==7) ) 
{ 
$R = hexdec(substr($textColor,1,2)); 
$G = hexdec(substr($textColor,3,2)); 
$B = hexdec(substr($textColor,5)); 
} 
else 
{ 
die("水印文字颜色格式不正确!"); 
} 
imagestring ( $ground_im, $textFont, $posX, $posY, $waterText, imagecolorallocate($ground_im, $R, $G, $B)); 
} 
//生成水印后的图片 
@unlink($groundImage); 
switch($ground_info[2])//取得背景图片的格式 
{ 
case 1:imagegif($ground_im,$groundImage);break; //创建gif格式的图片 
case 2:imagejpeg($ground_im,$groundImage);break; //创建jpeg格式的图片 
case 3:imagepng($ground_im,$groundImage);break; //创建png格式的图片 
default:die($errorMsg); 
} 
//释放内存 
if(isset($water_info)) unset($water_info); 
if(isset($water_im)) imagedestroy($water_im); 
unset($ground_info); 
imagedestroy($ground_im); 
} 
?> 
<?php 
for ($i=0;$i<count($_FILES['userfile']['tmp_name']);$i++) 
{ 
$upfile="./img/".($i+1).".png";//此处路径换成你的 
if(move_uploaded_file($_FILES['userfile']['tmp_name'][$i],$upfile)){ 
imageWaterMark($upfile,9,"./shuiyin.png","Made By Chenduan",5,"#FF0000"); 
/* 
* 功能:图片水印 (水印支持图片或文字) 
* imageWaterMark($groundImage,$waterPos=0,$waterImage="",$waterText="",$textFont=5,$textColor="#FF0000") 
* 参数: 
* $groundImage 背景图片,即需要加水印的图片,暂只支持GIF,JPG,PNG格式; 
* $waterPos 水印位置,有10种状态,0为随机位置; 
* 1为顶端居左,2为顶端居中,3为顶端居右; 
* 4为中部居左,5为中部居中,6为中部居右; 
* 7为底端居左,8为底端居中,9为底端居右; 
* $waterImage 图片水印,即作为水印的图片,暂只支持GIF,JPG,PNG格式; 
* $waterText 文字水印,即把文字作为为水印,支持ASCII码,不支持中文; 
* $textFont 文字大小,值为1、2、3、4或5,默认为5; 
* $textColor 文字颜色,值为十六进制颜色值,默认为#FF0000(红色); 
*/ 
echo "<img src=\"".$upfile."\" border=\"0\">"; 
echo "第".($i+1)."张图片操作成功<br>"; 
} 
else{ 
echo "第".($i+1)."张图片上传不了<br>"; 
} 
} 
?>
PHP 相关文章推荐
phpBB BBcode处理的漏洞
Oct 09 PHP
PHP5中新增stdClass 内部保留类
Jun 13 PHP
PHP MySQL应用中使用XOR运算加密算法分享
Aug 28 PHP
破解.net程序(dll文件)编译和反编译方法
Jan 31 PHP
一个php生成16位随机数的代码(两种方法)
Sep 16 PHP
PHP清除数组中所有字符串两端空格的方法
Oct 20 PHP
详解WordPress中用于更新和获取用户选项数据的PHP函数
Mar 08 PHP
PHP并发多进程处理利器Gearman使用介绍
May 16 PHP
php版微信小店调用api示例代码
Nov 12 PHP
thinkphp5.0整合phpsocketio完整攻略(绕坑)
Oct 12 PHP
laravel框架数据库配置及操作数据库示例
Oct 10 PHP
基于laravel belongsTo使用详解
Oct 18 PHP
基于initPHP的框架介绍
Apr 18 #PHP
PHP header()函数使用详细(301、404等错误设置)
Apr 17 #PHP
ajax完美实现两个网页 分页功能的实例代码
Apr 16 #PHP
关于Iframe如何跨域访问Cookie和Session的解决方法
Apr 15 #PHP
关于PHP的相似度计算函数:levenshtein的使用介绍
Apr 15 #PHP
关于PHP递归算法和应用方法介绍
Apr 15 #PHP
PHP 读取Postgresql中的数组
Apr 14 #PHP
You might like
PHP操作路由器实现方法示例
2019/04/27 PHP
jQuery 表格插件整理
2010/04/27 Javascript
javascript面向对象之Javascript 继承
2010/05/04 Javascript
jquery文本框中的事件应用以输入邮箱为例
2014/05/06 Javascript
Js+php实现异步拖拽上传文件
2015/06/23 Javascript
javascript常用正则表达式汇总
2015/07/31 Javascript
JS+CSS实现类似QQ好友及黑名单效果的树型菜单
2015/09/22 Javascript
jquery ajax双击div可直接修改div中的内容
2016/03/04 Javascript
用js控件div的滚动条,让它在内容更新时自动滚到底部的实现方法
2016/10/27 Javascript
JQuery异步提交表单与文件上传功能示例
2017/01/12 Javascript
Nodejs 获取时间加手机标识的32位标识实现代码
2017/03/07 NodeJs
jquery 手势密码插件
2017/03/17 Javascript
深入理解Antd-Select组件的用法
2020/02/25 Javascript
[01:36:57]【09DOTA2第一视角】小骷髅
2014/04/16 DOTA
Python和php通信乱码问题解决方法
2014/04/15 Python
Python去除字符串两端空格的方法
2015/05/21 Python
Python常用库推荐
2016/12/04 Python
Python2/3中urllib库的一些常见用法
2017/12/19 Python
更新修改后的Python模块方法
2019/03/03 Python
10个Python面试常问的问题(小结)
2019/11/20 Python
Pytorch 多块GPU的使用详解
2019/12/31 Python
详解PyQt5信号与槽的几种高级玩法
2020/03/24 Python
在pycharm中创建django项目的示例代码
2020/05/28 Python
浅谈Python 参数与变量
2020/06/20 Python
python3的pip路径在哪
2020/06/23 Python
tensorflow图像裁剪进行数据增强操作
2020/06/30 Python
Html5与App的通讯方式详解
2019/10/24 HTML / CSS
丹尼尔惠灵顿手表天猫官方旗舰店:Daniel Wellington
2017/08/25 全球购物
大学生新闻专业个人自我评价
2013/11/12 职场文书
安全教育感言
2014/03/04 职场文书
个人租房协议书范本
2014/09/30 职场文书
起诉书范文
2015/05/20 职场文书
走进毛泽东观后感
2015/06/04 职场文书
2019 入党申请书范文
2019/07/10 职场文书
Python代码,能玩30多款童年游戏!这些有几个是你玩过的
2021/04/27 Python
Go语言测试库testify使用学习
2022/07/23 Golang