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 相关文章推荐
完美解决dedecms中的[html][/html]和[code][/code]问题
Mar 20 PHP
PHP开发规范手册之PHP代码规范详解
Jan 13 PHP
PHP类继承 extends使用介绍
Jan 14 PHP
一组PHP可逆加密解密算法实例代码
Jan 21 PHP
php面向对象与面向过程两种方法给图片添加文字水印
Aug 26 PHP
PHP二维数组去重实例分析
Nov 18 PHP
PHP实现的文件上传类与用法详解
Jul 05 PHP
CodeIgniter整合Smarty的方法详解
Aug 25 PHP
PHP使用zlib扩展实现GZIP压缩输出的方法详解
Apr 09 PHP
PHP实现的权重算法示例【可用于游戏根据权限来随机物品】
Feb 15 PHP
php测试kafka项目示例
Feb 06 PHP
Thinkphp 框架扩展之Widget扩展实现方法分析
Apr 23 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基础知识:控制结构
2006/12/13 PHP
PHP编码转换
2012/11/05 PHP
PHP漏洞全解(详细介绍)
2012/11/13 PHP
PHPMailer邮件发送的实现代码
2013/05/04 PHP
php实现将数组转换为XML的方法
2015/03/09 PHP
php中static和const关键字用法分析
2016/12/07 PHP
jquery异步调用页面后台方法&amp;#8207;(asp.net)
2011/03/01 Javascript
jquery中的 $(&quot;#jb51&quot;)与document.getElementById(&quot;jb51&quot;) 的区别
2011/07/26 Javascript
如何解决Jquery库及其他库之间的$命名冲突
2013/09/15 Javascript
jquery.validate 自定义验证方法及validate相关参数
2016/01/18 Javascript
理解AngularJs篇:30分钟快速掌握AngularJs
2016/12/23 Javascript
js简易版购物车功能
2017/06/17 Javascript
vue+vux实现移动端文件上传样式
2017/07/28 Javascript
javascript 中模板方法单例的实现方法
2017/10/17 Javascript
vue仿淘宝订单状态的tab切换效果
2020/06/23 Javascript
JS返回页面时自动回滚到历史浏览位置
2018/09/26 Javascript
在vue项目中使用Jquery-contextmenu插件的步骤讲解
2019/01/27 jQuery
vuex实现数据状态持久化
2019/11/11 Javascript
JavaScript实现栈结构Stack过程详解
2020/03/07 Javascript
[03:43]2014DOTA2西雅图国际邀请赛 newbee战队巡礼
2014/07/07 DOTA
pycharm 使用心得(二)设置字体大小
2014/06/05 Python
python下载文件时显示下载进度的方法
2015/04/02 Python
pygame学习笔记(5):游戏精灵
2015/04/15 Python
利用Anaconda简单安装scrapy框架的方法
2018/06/13 Python
java判断三位数的实例讲解
2019/06/10 Python
分享8点超级有用的Python编程建议(推荐)
2019/10/13 Python
Python实现变声器功能(萝莉音御姐音)
2019/12/05 Python
Python-openpyxl表格读取写入的案例详解
2020/11/02 Python
html5的新增的标签和废除的标签简要概述
2013/02/20 HTML / CSS
希尔顿酒店中国网站:Hilton中国
2017/03/11 全球购物
银行内勤岗位职责
2014/04/09 职场文书
公司联欢会策划方案
2014/05/19 职场文书
护士长2014年终工作总结
2014/11/11 职场文书
2015年领班工作总结
2015/04/29 职场文书
《成长的天空》读后感3篇
2019/12/06 职场文书
JavaScript实现简单计时器
2021/06/22 Javascript