用来给图片加水印的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 增加了对 .ZIP 文件的读取功能
Oct 09 PHP
使用PHP实现密保卡功能实现代码&amp;lt;打包下载直接运行&amp;gt;
Oct 09 PHP
PHP代码审核的详细介绍
Jun 13 PHP
php switch语句多个值匹配同一代码块的实现
Mar 03 PHP
浅析PHP的静态成员函数效率更高的原因
Jun 13 PHP
laravel 4安装及入门图文教程
Oct 29 PHP
PHP中mysql_field_type()函数用法
Nov 24 PHP
PHP实现货币换算的方法
Nov 29 PHP
PHP中Session可能会引起并发问题
Jun 26 PHP
详解WordPress中调用评论模板和循环输出评论的PHP函数
Jan 05 PHP
PHP的Laravel框架中使用AdminLTE模板来编写网站后台界面
Mar 21 PHP
php+jQuery实现的三级导航栏下拉菜单显示效果
Aug 10 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
PHP5+UTF8多文件上传类
2008/10/17 PHP
微信公众平台网页授权获取用户基本信息中授权回调域名设置的变动
2014/10/21 PHP
PHP生成可点击刷新的验证码简单示例
2016/05/13 PHP
深入理解php printf() 输出格式化的字符串
2016/05/23 PHP
PHP开启目录引索+fancyindex漂亮目录浏览带搜索功能
2019/09/23 PHP
ie 处理 gif动画 的onload 事件的一个 bug
2007/04/12 Javascript
Javascript注入技巧
2007/06/22 Javascript
js 页面输出值
2008/11/30 Javascript
Extjs4 Treegrid 使用心得分享(经验篇)
2013/07/01 Javascript
js网页版计算器的简单实现
2013/07/02 Javascript
javascript的BOM汇总
2015/07/16 Javascript
基于JavaScript实现添加到购物车效果附源码下载
2016/08/22 Javascript
jQuery 特性操作详解及实例代码
2016/09/29 Javascript
微信小程序 swiper组件轮播图详解及实例
2016/11/16 Javascript
解决easyui日期时间框ie的兼容的问题
2018/03/01 Javascript
vue.js或js实现中文A-Z排序的方法
2018/03/08 Javascript
vue获取data数据改变前后的值方法
2019/11/07 Javascript
[56:46]Liquid vs IG 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/18 DOTA
Python subprocess模块学习总结
2014/03/13 Python
python迭代器实例简析
2014/09/25 Python
python-str,list,set间的转换实例
2018/06/27 Python
TensorFlow实现模型评估
2018/09/07 Python
Python tensorflow实现mnist手写数字识别示例【非卷积与卷积实现】
2019/12/19 Python
解决python DataFrame 打印结果不换行问题
2020/04/09 Python
HTML5拖拽的简单实例
2016/05/30 HTML / CSS
加拿大建筑和装修专家:Reno-Depot
2017/12/21 全球购物
Under Armour安德玛德国官网:美国高端运动科技品牌
2019/03/09 全球购物
公司业务主管岗位职责
2013/12/07 职场文书
酒店仓管员岗位职责
2014/04/28 职场文书
企业理念标语
2014/06/09 职场文书
2015年城乡环境综合治理工作总结
2015/07/24 职场文书
新教师教学工作总结
2015/08/12 职场文书
2015年行政管理人员工作总结
2015/10/15 职场文书
《我们的民族小学》教学反思
2016/02/19 职场文书
如何书写公司员工保密协议?
2019/06/27 职场文书
Spring Boot实现文件上传下载
2022/08/14 Java/Android