用来给图片加水印的PHP类


Posted in PHP onApril 09, 2008
<?php     
/*    
* 功能:PHP图片水印 (水印支持图片或文字)    
* 参数:    
*     $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(红色);    
*    
* 注意:Support GD 2.0,Support FreeType、GIF Read、GIF Create、JPG 、PNG    
*     $waterImage 和 $waterText 最好不要同时使用,选其中之一即可,优先使用 $waterImage。    
*     当$waterImage有效时,参数$waterString、$stringFont、$stringColor均不生效。    
*     加水印后的图片的文件名和 $groundImage 一样。    
* 作者:longware @ 2004-11-3 14:15:13    
*/    
function imageWaterMark($groundImage,$waterPos=0,$waterImage=”",$waterText=”",$textFont=5,$textColor=”#FF0000″)     
{     
  $isWaterImage = FALSE;     
  $formatMsg = “暂不支持该文件格式,请用图片处理软件将图片转换为GIF、JPG、PNG格式。”;       //读取水印文件     
  if(!emptyempty($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;     
        case 2:$water_im = imagecreatefromjpeg($waterImage);break;     
        case 3:$water_im = imagecreatefrompng($waterImage);break;     
        default:die($formatMsg);     
    }     
  }     
  //读取背景图片     
  if(!emptyempty($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*5),0,”./cour.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( !emptyempty($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;     
    case 2:imagejpeg($ground_im,$groundImage);break;     
    case 3:imagepng($ground_im,$groundImage);break;     
    default:die($errorMsg);     
  }     
  //释放内存     
  if(isset($water_info)) unset($water_info);     
  if(isset($water_im)) imagedestroy($water_im);     
  unset($ground_info);     
  imagedestroy($ground_im);     
}     
//—————————————————————————————     
$id=$_REQUEST['id'];     
$num = count($_FILES['userfile']['name']);     
print_r($_FILES['userfile']);     
print_r($_FILES['userfile']['name']);     
echo $num;     
echo “<bR>”;     
if(isset($id)){     
 for($i=0;$i<$id;$i++){     
  if(isset($_FILES) && !emptyempty($_FILES['userfile']) && $_FILES['userfile']['size']>0)     
{     
  $uploadfile = “./”.time().”_”.$_FILES['userfile'][name][$i];     
  echo “<br>”;     
  echo $uploadfile;     
  if (copy($_FILES['userfile']['tmp_name'][$i], $uploadfile))     
  {     
    echo “OK<br>”;     
    //文字水印     
    //imageWaterMark($uploadfile,5,”",”HTTP://www.lvye.info”,5,”#cccccc“);     
    //图片水印     
    $waterImage=”logo_ok1.gif”;//水印图片路径     
    imageWaterMark($uploadfile,9,$waterImage);     
    echo “<img src=\”".$uploadfile.”\” border=\”0\”>”;     
  }     
  else    
  {     
    echo “Fail<br>”;     
  }     
}     
 }     
}     
?>     
<form enctype=”multipart/form-data” method=”POST”>     
<?php     
for($a=0;$a<$id;$a++){     
 echo “文件: <input name=\”userfile[]\” type=\”file\”><br>”;     
}     
?>     
<input type=”submit” value=”上传”>     
</form>    
PHP 相关文章推荐
PHP乱码问题,UTF-8乱码常见问题小结
Apr 09 PHP
php object转数组示例
Jan 15 PHP
php将文本文件转换csv输出的方法
Dec 31 PHP
PHP中的socket_read和socket_recv区别详解
Feb 09 PHP
PHP编写登录验证码功能 附调用方法
May 19 PHP
ThinkPHP 在阿里云上的nginx.config配置实例详解
Oct 11 PHP
PHP迭代器和迭代的实现与使用方法分析
Apr 19 PHP
不常用但很实用的PHP预定义变量分析
Jun 25 PHP
php使用curl模拟多线程实现批处理功能示例
Jul 25 PHP
PHP实现基本留言板功能原理与步骤详解
Mar 26 PHP
PHP 实现 JSON 数据的编码和解码操作详解
Apr 22 PHP
YII2 全局异常处理深入讲解
Mar 24 PHP
在PHP中读取和写入WORD文档的代码
Apr 09 #PHP
生成php程序的php代码
Apr 07 #PHP
用php获取远程图片并把它保存到本地的代码
Apr 07 #PHP
在php MYSQL中插入当前时间
Apr 06 #PHP
php读取30天之内的根据算法排序的代码
Apr 06 #PHP
PHP实现Socket服务器的代码
Apr 03 #PHP
mysql+php分页类(已测)
Mar 31 #PHP
You might like
杏林同学录(八)
2006/10/09 PHP
PHP 输出缓存详解
2009/06/20 PHP
php不使用插件导出excel的简单方法
2014/03/04 PHP
Yii Framework框架获取分类下面的所有子类方法
2014/06/20 PHP
浅析PHP关键词替换的类(避免重复替换,保留与还原原始链接)
2015/09/22 PHP
PHP结合Jquery和ajax实现瀑布流特效
2016/01/07 PHP
PHP接口继承及接口多继承原理与实现方法详解
2017/10/18 PHP
javascript中的107个基础知识收集整理 推荐
2010/03/29 Javascript
分享14个很酷的jQuery导航菜单插件
2011/04/25 Javascript
基于BootStrap Metronic开发框架经验小结【四】Bootstrap图标的提取和利用
2016/05/12 Javascript
js自定义select下拉框美化特效
2016/05/12 Javascript
AngularJS中使用ngModal模态框实例
2017/05/27 Javascript
js原生代码实现轮播图的实例讲解
2017/07/28 Javascript
如何在 JavaScript 中更好地利用数组
2018/09/27 Javascript
微信小程序ibeacon三点定位详解
2018/10/31 Javascript
其实你可以少写点if else与switch(推荐)
2019/01/10 Javascript
用npm-run实现自动化任务的方法示例
2019/01/14 Javascript
更优雅的微信小程序骨架屏实现详解
2019/08/07 Javascript
[06:15]2016国际邀请赛中国区预选赛单车采访:我顶WINGS
2016/06/27 DOTA
python实现自动登录人人网并访问最近来访者实例
2014/09/26 Python
使用Python脚本来获取Cisco设备信息的示例
2015/05/04 Python
tensorflow入门之训练简单的神经网络方法
2018/02/26 Python
解决python 无法加载downsample模型的问题
2018/10/25 Python
python实现在函数图像上添加文字和标注的方法
2019/07/08 Python
用python wxpy管理微信公众号并利用微信获取自己的开源数据
2019/07/30 Python
加拿大著名时装品牌:SOIA & KYO
2016/08/23 全球购物
FC-Moto英国:欧洲最大的摩托车服装和头盔商店之一
2019/08/25 全球购物
厂长助理岗位职责
2013/12/27 职场文书
活动策划求职信模板
2014/04/21 职场文书
德能勤绩廉个人总结
2015/02/14 职场文书
2015年学校总务工作总结
2015/07/20 职场文书
小学体育跳绳课教学反思
2016/02/16 职场文书
2019年度行政文员工作计划范本!
2019/07/04 职场文书
关于感恩的作文
2019/08/26 职场文书
python操作xlsx格式文件并读取
2021/06/02 Python
HTML5页面音频自动播放的实现方式
2021/06/21 HTML / CSS