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 相关文章推荐
用定制的PHP应用程序来获取Web服务器的状态信息
Oct 09 PHP
浅析PKI加密解密 OpenSSL
Jul 01 PHP
本地机apache配置基于域名的虚拟主机详解
Aug 10 PHP
朋友网关于QQ相关的PHP代码(研究QQ的绝佳资料)
Jan 26 PHP
php打印一个边长为N的实心和空心菱型的方法
Mar 02 PHP
如何使用PHP Embed SAPI实现Opcodes查看器
Nov 10 PHP
Yii2实现中国省市区三级联动实例
Feb 08 PHP
PHP实现网页内容html标签补全和过滤的方法小结【2种方法】
Apr 27 PHP
Laravel框架集成UEditor编辑器的方法图文与实例详解
Apr 17 PHP
Yii 框架控制器创建使用及控制器响应操作示例
Oct 14 PHP
Yii框架where查询用法实例分析
Oct 22 PHP
PHP扩展类型及安装方式解析
Apr 27 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者的疑难问答(1)
2006/10/09 PHP
判断PHP数组是否为空的代码
2011/09/08 PHP
Yii框架结合sphinx,Ajax实现搜索分页功能示例
2016/10/18 PHP
jQuery学习笔记(3)--用jquery(插件)实现多选项卡功能
2013/04/08 Javascript
js获取json元素数量的方法
2015/01/27 Javascript
Windows下用PyCharm和Visual Studio开始Python编程
2015/10/26 Javascript
使用bootstrap实现多窗口和拖动效果
2016/09/22 Javascript
javascript汉字拼音互转的简单实例
2016/10/09 Javascript
Vue.js使用v-show和v-if的注意事项
2016/12/13 Javascript
如何解决vue与传统jquery插件冲突
2017/03/20 Javascript
Vue分页器实现原理详解
2019/06/28 Javascript
p5.js绘制旋转的正方形
2019/10/23 Javascript
javascript实现京东登录显示隐藏密码
2020/08/02 Javascript
使用Vant完成Dialog弹框案例
2020/11/11 Javascript
[02:15]2014DOTA2国际邀请赛 专访LGD.lin小兔子是大腿
2014/07/14 DOTA
python日志logging模块使用方法分析
2019/05/23 Python
tensor和numpy的互相转换的实现示例
2019/08/02 Python
python3应用windows api对后台程序窗口及桌面截图并保存的方法
2019/08/27 Python
python 基于dlib库的人脸检测的实现
2019/11/08 Python
Python 依赖库太多了该如何管理
2019/11/08 Python
IE10 Error.stack 让脚本调试更加方便快捷
2013/04/22 HTML / CSS
HTML5梦幻之旅——炫丽的流星雨效果实现过程
2013/08/06 HTML / CSS
localStorage的过期时间设置的方法详解
2018/11/26 HTML / CSS
韩国最大的购物网站:Gmarket
2019/06/20 全球购物
西班牙在线光学:Visual-Click
2020/06/22 全球购物
sort命令的作用和用法
2013/08/25 面试题
七年级生物教学反思
2014/01/30 职场文书
《彭德怀和他的大黑骡子》教学反思
2014/04/12 职场文书
小学校长先进事迹材料
2014/05/13 职场文书
三人合伙协议书范本
2014/10/29 职场文书
手机销售员岗位职责
2015/04/11 职场文书
物业工程部主管岗位职责
2015/04/16 职场文书
幽灵公主观后感
2015/06/09 职场文书
Python中X[:,0]和X[:,1]的用法
2021/05/10 Python
python使用tkinter实现透明窗体上绘制随机出现的小球(实例代码)
2021/05/17 Python
vue 实现上传组件
2021/05/31 Vue.js