`

加水印类

阅读更多

http://hi.baidu.com/%C0%BC%C0%BCsns/blog/item/534b78915575281b7bf48017.html

 

http://www.cardii.net/php-use-imagemagick/

 

无关

http://hi.baidu.com/%D5%E4%B2%D8%B5%C4%C7%E9%CA%E9/blog

 

 

<?php

class Image {

/**
* 加给图片加水印
*
* @param strimg $groundImage 要加水印地址
* @param int $waterPos 水印位置
* @param string $waterImage 水印图片地址
* @param string $waterText 文本文字
* @param int $textFont 文字大小
* @param string $textColor 文字颜色
* @param int $minWidth 小于此值不加水印
* @param int $minHeight 小于此值不加水印
* @param float $alpha 透明度
* @return FALSE
* @author liyonghua 2008-10-28 修改中...
*/
public static function waterMark($groundImage , $waterPos = 0 , $waterImage = "" , $waterText = "" , $textFont = 15 , $textColor = "#FF0000",$minWidth='100',$minHeight='100',$alpha=0.9){
$isWaterImg = FALSE;
$bg_h = $bg_w = $water_h = $water_w = 0;
//获取背景图的高,宽
if(is_file($groundImage) && !empty($groundImage)){
   $bg = new Imagick();
   $bg ->readImage($groundImage);
   $bg_h = $bg->getImageHeight();
   $bg_w = $bg->getImageWidth();
}
//获取水印图的高,宽
if(is_file($waterImage) && !empty($waterImage)){
   $water = new Imagick($waterImage);
   $water_h = $water->getImageHeight();
   $water_w = $water->getImageWidth();
}
//如果背景图的高宽小于水印图的高宽或指定的高和宽则不加水印
if($bg_h < $minHeight || $bg_w < $minWidth || $bg_h < $water_h || $bg_w < $water_w ) {
   return ;
}else {
   $isWaterImg = TRUE;
}
//加水印
if($isWaterImg){  
   $dw = new ImagickDraw();  
   //加图片水印
   if(is_file($waterImage)){
    $water->setImageOpacity($alpha);
    $dw -> setGravity($waterPos);
    $dw -> composite($water->getImageCompose(),0,0,50,0,$water);
    $bg -> drawImage($dw);
    if(!$bg -> writeImage($groundImage)){
     return FALSE;
    }  
   }else{
    //加文字水印
    $dw -> setFontSize($textFont);
    $dw -> setFillColor($textColor);
    $dw -> setGravity($waterPos);
    $dw -> setFillAlpha($alpha);
    $dw -> annotation(0,0,$waterText);
    $bg -> drawImage($dw);
    if(!$bg -> writeImage($groundImage)){
     return FALSE;
    }
   }
}
}

/**
     * 功能: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
     *
     */
public static function waterMark2($groundImage , $waterPos = 0 , $waterImage = "" , $waterText = "" , $textFont = 5 , $textColor = "#FF0000",$minwidth,$minheight){  
   $isWaterImage = FALSE ;
//   $waterImage = SYSROOTPATH . $waterImage;
  
   $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;
           case 2 : $water_im = imagecreatefromjpeg ( $waterImage );break;
           case 3 : $water_im = imagecreatefrompng ( $waterImage );break;
           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 , SYSROOTPATH."images/watermark/ant1.ttf" , $waterText ); //取得使用 TrueType 字体的文本的范围
           $w = $temp [ 2 ] - $temp [ 6 ];
           $h = $temp [ 3 ] - $temp [ 7 ];
           unset( $temp );
           $label = "文字区域" ;
           }
         // add
           if( ( $ground_w < $w ) || ( $ground_h < $h ) || ( $ground_w < $minwidth ) || ( $ground_h < $minheight ) ){
           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;
           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 );
}

}//end class

?>
分享到:
评论

相关推荐

    php加水印类

    "php加水印类"就是这样一个工具,它允许开发者通过编程方式轻松地在图像上添加文本或图像水印。以下是对这个主题的详细说明: 首先,`watermark.class.php`是这个类的实现文件。它通常包含一个或多个类,这些类具有...

    PHP上传多图片生成缩略图加水印类

    这个名为"PHP上传多图片生成缩略图加水印类"的项目,旨在提供一个方便、高效的解决方案,适用于网站内容管理、社交媒体分享等场景。 首先,我们要理解上传图片的基本流程。在PHP中,我们可以使用`$_FILES`全局变量...

    php给上传图片加水印类.zip

    一个php给图片加水印与上传图片加水印php类。 功能:PHP图片水印 (水印支持图片或文字) $groundImage 背景图片,即需要加水印的图片,暂只支持GIF,JPG,PNG格式; $waterImage 图片水印,即作为...

    PHP上传加水印类

    PHP上传类,可对上传或已存在的图片进行加水印、缩放等操作。水印支持图片水印和文字水印,水印位置有九个

    PHP图片加水印类并附有测试程序

    接下来,定义水印的位置和透明度,然后调用类的方法执行实际的水印添加操作。最后,根据返回值显示操作结果。 通过这种方式,我们可以灵活地在PHP中实现图片水印功能,适应各种应用场景。同时,这个类设计也可以...

    java图片加水印工具类

    这个“java图片加水印工具类”正是为了简化这一过程而设计的,它允许开发者通过调用预定义的方法,快速地在图片上添加文字或图形水印,无需每次都手动编写相同的功能代码。 首先,我们需要了解什么是水印。水印通常...

    C#给图片加水印工具类

    C#给图片加水印的工具类,新手可以参考,也可以直接拿来用

    视频批量加水印软件

    "视频批量加水印软件"正是解决这一需求的工具。它允许用户一次性为多个视频文件添加水印,大大提高了工作效率,避免了手动操作的繁琐与耗时。 水印通常是一种图像、文字或图形,用于标识视频的所有者或者表示版权...

    C# 批量加水印(含文字水印以及图片水印).rar

    总的来说,C#的这个批量加水印解决方案结合了GDI+的强大功能,提供了一个高效且灵活的方法,能够帮助开发者快速实现水印添加,同时支持批量处理,大大提高了工作效率。无论是个人项目还是商业应用,这样的工具都是...

    FCKeditorV2上传加水印

    《FCKeditorV2上传加水印:在线编辑器与图像处理详解》 FCKeditorV2是一款广泛使用的在线文本编辑器,它为网站提供了一种便捷的方式,让用户能够像在桌面环境中一样编辑内容。然而,原始版本的FCKeditorV2并不具备...

    java 图片缩放、加水印

    图片操作类源代码,该类主要用于给图片进行缩放、加水印和得到图片的高、宽及类型。 具体操作请自己参照方法说明自己测试改写。

    Flex_给图片加水印

    在给图片加水印时,我们需要用到ActionScript的位图操作类,如`flash.display.BitmapData`和`flash.geom.Matrix`。 2. **BitmapData对象**: 这是ActionScript中用于处理位图图像的核心类。我们可以创建一个`...

    图片批量加水印软件 数字水印

    在IT行业中,对图片进行版权保护或品牌宣传时,经常需要用到图片加水印的技术。"图片批量加水印软件 数字水印"是一款专为此目的设计的工具,它能够帮助用户快速、便捷地为大量图片添加数字水印,有效地防止图片被...

    淘宝图片快速批量加水印

    "淘宝图片快速批量加水印"就是一个针对这一需求而设计的工具,它能帮助淘宝卖家快速、高效地在大量商品图片上添加个性化水印,以防止他人非法使用。 批量加水印的功能对于拥有众多商品图片的商家来说尤其实用,可以...

    加水印工具 非常好用小巧的软件

    加水印工具是一种在图像、视频或其他数字内容上添加标识或文字以保护版权或增加辨识度的应用程序。这类工具通常具有用户友好的界面和多种自定义选项,使得普通用户也能轻松操作。在这个数字化时代,保护知识产权变得...

    PDF加水印附加pb源码调用示例

    本文将详细介绍如何使用C#语言开发一个DLL动态链接库来实现PDF加水印的功能,并提供PowerBuilder(PB)源码调用示例。 首先,我们需要了解PDF加水印的基本原理。水印通常是一种半透明的文字或图像,它会被叠加在PDF...

    图片批量加水印以及缩略图

    选择要加水印的图片文件夹和指定输出路径,是这类工具的基本操作流程。用户只需设置好水印参数(如位置、透明度等)和缩略图规格(如宽度、高度),然后软件会自动处理文件夹内的所有图片。 标签中的“图片批量加...

    pb给图片加水印的方法

    2. **加载图片**:使用Image类的FromFile方法加载要添加水印的图片。 3. **创建Graphics对象**:通过Image对象的CreateGraphics方法创建一个Graphics对象,它是绘制图像的基础。 4. **设置水印文本和样式**:定义...

    图片加水印软件源码

    8. **版权与法律问题**:在开发这类软件时,应尊重和遵守版权法,确保用户在加水印时不会侵犯他人版权。 综上所述,“图片加水印软件源码”涵盖了图像处理、软件工程、用户交互设计等多个IT领域的知识点,开发者...

    c#winform图片加水印工具v1.1.zip

    《C# WinForm图片加水印工具v1.1详解》 在数字图像处理领域,为保护版权或增加视觉标识,常需要在图片上添加水印。C#作为.NET框架下的主要开发语言,提供了丰富的库和API来实现这一功能。本文将详细探讨“C# ...

Global site tag (gtag.js) - Google Analytics