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的FTP学习(二)[转自奥索]
Oct 09 PHP
全文搜索和替换
Oct 09 PHP
php 8小时时间差的解决方法小结
Dec 22 PHP
DedeCMS 核心类TypeLink.class.php摘要笔记
Apr 07 PHP
ThinkPHP与PHPExcel冲突解决方法
Aug 08 PHP
我的php学习笔记(毕业设计)
Feb 21 PHP
PHP将回调函数作用到给定数组单元的方法
Aug 19 PHP
smarty模板引擎从php中获取数据的方法
Jan 22 PHP
WordPres对前端页面调试时的两个PHP函数使用小技巧
Dec 22 PHP
PHP实现将标点符号正则替换为空格的方法
Aug 09 PHP
php根据地址获取百度地图经纬度的实例方法
Sep 03 PHP
浅谈laravel5.5 belongsToMany自身的正确用法
Oct 17 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
解析zend Framework如何自动加载类
2013/06/28 PHP
PHP实现合并discuz用户
2015/08/05 PHP
PHP 7.0.2 正式版发布
2016/01/08 PHP
php 使用html5 XHR2实现上传文件与进度显示功能示例
2020/03/03 PHP
yii框架结合charjs实现统计30天数据的方法
2020/04/04 PHP
JavaScript Array扩展实现代码
2009/10/14 Javascript
基于jquery的超简单上下翻
2010/04/20 Javascript
在JS中如何调用JSP中的变量
2014/01/22 Javascript
js+jquery常用知识点汇总
2015/03/03 Javascript
浅谈js 闭包引起的内存泄露问题
2015/06/22 Javascript
快速实现JS图片懒加载(可视区域加载)示例代码
2017/01/04 Javascript
原生JS实现简单放大镜效果
2017/02/08 Javascript
Angular多选、全选、批量选择操作实例代码
2017/03/10 Javascript
vue利用v-for嵌套输出多层对象,分别输出到个表的方法
2018/09/07 Javascript
vue-cli3+typescript初体验小结
2019/02/28 Javascript
vue实现新闻展示页的步骤详解
2019/04/11 Javascript
vue自定义插件封装,实现简易的elementUi的Message和MessageBox的示例
2020/11/20 Vue.js
python中精确输出JSON浮点数的方法
2014/04/18 Python
详解python之协程gevent模块
2018/06/14 Python
python tkinter库实现气泡屏保和锁屏
2019/07/29 Python
Python 正则表达式爬虫使用案例解析
2019/09/23 Python
python统计字符串中字母出现次数代码实例
2020/03/02 Python
基于Python数据分析之pandas统计分析
2020/03/03 Python
Django调用百度AI接口实现人脸注册登录代码实例
2020/04/23 Python
基于python纯函数实现井字棋游戏
2020/05/27 Python
Html5页面中的返回实现的方法
2018/02/26 HTML / CSS
苹果中国官方网站:Apple中国
2016/07/22 全球购物
土木工程实习生自我鉴定
2013/09/19 职场文书
服务标语口号
2014/07/01 职场文书
创先争优个人总结
2015/03/04 职场文书
休学证明范本
2015/06/19 职场文书
感恩父母主题班会
2015/08/12 职场文书
Python排序算法之插入排序及其优化方案详解
2021/06/11 Python
Python Pandas常用函数方法总结
2021/06/15 Python
解析mybatis-plus中的resultMap简单使用
2021/11/23 Java/Android
win10蓝屏0xc0000001安全模式进不了怎么办?win10出现0xc0000001的解决方法
2022/08/05 数码科技