用来给图片加水印的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蜘蛛统计插件只要有mysql就可用
Oct 12 PHP
PHP中使用crypt()实现用户身份验证的代码
Sep 05 PHP
PHP入门之常量简介和系统常量
May 12 PHP
php判断类是否存在函数class_exists用法分析
Nov 14 PHP
php中ob_flush函数和flush函数用法分析
Mar 18 PHP
PHP面向对象中new self()与 new static()的区别浅析
Aug 17 PHP
PHPExcel 修改已存在Excel的方法
May 03 PHP
thinkPHP5框架中widget的功能与用法详解
Jun 11 PHP
laravel中数据显示方法(默认值和下拉option默认选中)
Oct 11 PHP
修改Laravel自带的认证系统的User类的命名空间的步骤
Oct 15 PHP
Yii框架where查询用法实例分析
Oct 22 PHP
php中yii框架实例用法
Dec 22 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
php simplexmlElement操作xml的命名空间实现代码
2011/01/04 PHP
php防止网站被刷新的方法汇总
2014/12/01 PHP
百度地图经纬度转换到腾讯地图/Google 对应的经纬度
2015/08/28 PHP
php基于CodeIgniter实现图片上传、剪切功能
2016/05/14 PHP
javascript英文日期(有时间)选择器
2007/05/02 Javascript
js获取对象为null的解决方法
2013/11/21 Javascript
JavaScript中使用Object.prototype.toString判断是否为数组
2015/04/01 Javascript
使用javascript实现判断当前浏览器
2015/04/14 Javascript
实现placeholder效果的方案汇总
2015/06/11 Javascript
jquery实现不包含当前项的选择器实例
2015/06/25 Javascript
基于jquery实现表格内容筛选功能实例解析
2016/05/09 Javascript
jQuery获取select选中的option的value值实现方法
2016/08/29 Javascript
Express URL跳转(重定向)的实现方法
2017/04/07 Javascript
浅谈Vue下使用百度地图的简易方法
2018/03/23 Javascript
vue的全局变量和全局拦截请求器的示例代码
2018/09/13 Javascript
nodejs 使用nodejs-websocket模块实现点对点实时通讯
2018/11/28 NodeJs
微信小程序 swiper 组件遇到的问题及解决方法
2019/05/26 Javascript
vue实现评价星星功能
2020/06/30 Javascript
原生jQuery实现只显示年份下拉框
2020/12/24 jQuery
[02:35]DOTA2英雄基础教程 末日使者
2013/12/04 DOTA
[51:15]完美世界DOTA2联赛PWL S2 PXG vs Magma 第一场 11.21
2020/11/24 DOTA
用Python编程实现语音控制电脑
2014/04/01 Python
python中引用与复制用法实例分析
2015/06/04 Python
浅谈python多线程和队列管理shell程序
2015/08/04 Python
Pyspider中给爬虫伪造随机请求头的实例
2018/05/07 Python
python框架django项目部署相关知识详解
2019/11/04 Python
nginx搭建基于python的web环境的实现步骤
2020/01/03 Python
在Python IDLE 下调用anaconda中的库教程
2020/03/09 Python
TensorFlow使用Graph的基本操作的实现
2020/04/22 Python
为奢侈时尚带来了慈善元素:Olivela
2018/09/29 全球购物
Fabletics官网:美国运动服饰品牌,由好莱坞女演员凯特·哈德森创立
2019/10/19 全球购物
Viking Direct爱尔兰:办公用品和家具
2019/11/21 全球购物
《鸟的天堂》教学反思
2014/02/27 职场文书
会计电算化专业求职信
2014/06/10 职场文书
农村党支部书记司法四风问题对照检查材料
2014/09/26 职场文书
来探秘“德国中小企业”的成功之道
2019/07/26 职场文书