`

PHP_方法_PHP添加水印方法

    博客分类:
  • PHP
阅读更多
简介摘要:功能:PHP图片水印 (水印支持图片或文字) * 参数: * $groundImage 背景图片,即需要加水印的图片,暂只支持GIF,JPG,PNG格式; * $waterPos
简单测试:imageWaterMark($upload_path.$large_image_name.$_SESSION['user_file_ext'],9,'logo_110x55.jpg','',5,'#ccc','',0,0);

<?PHP
/*
* 功能:PHP图片水印 (水印支持[zhi chi]图片或文字[wen zi])
* 参数[can shu]:
*       $groundImage     背景图片,即需要加水印的图片,暂只支持[zhi chi]GIF,JPG,PNG格式;
*       $waterPos        水印位置[wei zhi],有10种状态[zhuang tai],0为随机位置[wei zhi];
*                       1为顶端居左,2为顶端居中,3为顶端居右;
*                       4为中部居左,5为中部居中,6为中部居右;
*                       7为底端居左,8为底端居中,9为底端居右;
*       $waterImage      图片水印,即作为水印的图片,暂只支持[zhi chi]GIF,JPG,PNG格式;
*       $waterText       文字[wen zi]水印,即把文字[wen zi]作为为水印,支持[zhi chi]ASCII码,不支持[zhi chi]中文[zhong wen];
*       $fontSize        文字[wen zi]大小,值为1、2、3、4或5,默认[mo ren]为5;
*       $textColor       文字[wen zi]颜色,值为十六进制[shi liu jin zhi]颜色值,默认[mo ren]为#CCCCCC(白灰色);
*       $fontfile        ttf字体[zi ti]文件[wen jian],即用来设置[she zhi]文字[wen zi]水印的字体[zi ti]。使用windows的用户[yong hu]在系统[xi tong]盘[xi tong pan]的目录中
*                       搜索[sou suo]*.ttf可以得到系统[xi tong]中安装[an zhuang]的字体[zi ti]文件[wen jian],将所要的文件[wen jian]拷到网站[wang zhan]合适的目录中,
*                       默认[mo ren]是当前目录[dang qian mu lu]下arial.ttf。
*       $xOffset         水平偏移量[pian yi liang],即在默认[mo ren]水印坐标值基础上加上这个值,默认[mo ren]为0,如果你想留给水印留
*                       出水平方向上的边距,可以设置[she zhi]这个值,如:2 则表示在默认[mo ren]的基础上向右移[you yi]2个单位[dan wei],-2 表示向左移[zuo yi]两单位[dan wei]
*       $yOffset         垂直偏移量[pian yi liang],即在默认[mo ren]水印坐标值基础上加上这个值,默认[mo ren]为0,如果你想留给水印留
*                       出垂直方向上的边距,可以设置[she zhi]这个值,如:2 则表示在默认[mo ren]的基础上向下移2个单位[dan wei],-2 表示向上移两单位[dan wei]
* 返回值:
*        0   水印成功
*        1   水印图片格式目前不支持[zhi chi]
*        2   要水印的背景图片不存在
*        3   需要加水印的图片的长度或宽度比水印图片或文字[wen zi]区域[qu yu]还小,无法生成水印
*        4   字体[zi ti]文件[wen jian]不存在
*        5   水印文字[wen zi]颜色格式不正确
*        6   水印背景图片格式目前不支持[zhi chi]
* 修改[xiu gai]记录:
*         
* 注意:Support GD 2.0,Support FreeType、GIF Read、GIF Create、JPG 、PNG
*       $waterImage 和 $waterText 最好不要同时使用,选其中之一即可,优先使用 $waterImage。
*       当$waterImage有效[you xiao]时,参数[can shu]$waterString、$stringFont、$stringColor均不生效。
*       加水印后的图片的文件[wen jian]名[wen jian ming]和 $groundImage 一样。
* 作者:高西林
* 日期:2007-4-28
* 说明[shuo ming]:本程序根据longware的程序改写而成。
*/
function imageWaterMark($groundImage,$waterPos=0,$waterImage="",$waterText="",$fontSize=12,$textColor="#CCCCCC", $fontfile='./arial.ttf',$xOffset=0,$yOffset=0)
{

   $isWaterImage = FALSE;
     //读取[du qu]水印文件[wen jian]
     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:return 1;
         }
     }

     //读取[du qu]背景图片
     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:return 1;
         }
     } else {
         return 2;
     }

     //水印位置[wei zhi]
     if($isWaterImage) { //图片水印  
         $w = $water_w;
         $h = $water_h;
         $label = "图片的";
         } else {  
     //文字[wen zi]水印
        if(!file_exists($fontfile))return 4;
         $temp = imagettfbbox($fontSize,0,$fontfile,$waterText);//取得使用 TrueType 字体[zi ti]的文本[wen ben]的范围[fan wei]
         $w = $temp[2] - $temp[6];
         $h = $temp[3] - $temp[7];
         unset($temp);
     }
     if( ($ground_w < $w) || ($ground_h < $h) ) {
         return 3;
     }
     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;     
     }

     //设定图像[tu xiang]的混色模式[mo shi]
     imagealphablending($ground_im, true);

     if($isWaterImage) { //图片水印
         imagecopy($ground_im, $water_im, $posX + $xOffset, $posY + $yOffset, 0, 0, $water_w,$water_h);//拷贝[kao bei]水印到目标[mu biao]文件[wen jian]         
     } else {//文字[wen zi]水印
         if( !empty($textColor) && (strlen($textColor)==7) ) {
             $R = hexdec(substr($textColor,1,2));
             $G = hexdec(substr($textColor,3,2));
             $B = hexdec(substr($textColor,5));
         } else {
           return 5;
         }
         imagettftext ( $ground_im, $fontSize, 0, $posX + $xOffset, $posY + $h + $yOffset, imagecolorallocate($ground_im, $R, $G, $B), $fontfile, $waterText);
     }

     //生成水印后的图片
     @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: return 6;
     }

     //释放[shi fang]内存[nei cun]
     if(isset($water_info)) unset($water_info);
     if(isset($water_im)) imagedestroy($water_im);
     unset($ground_info);
     imagedestroy($ground_im);
     //
     return 0;
}
?>
  • jq.zip (77.9 KB)
  • 下载次数: 107
分享到:
评论

相关推荐

    php图片添加水印

    在PHP中,添加水印是一项常见的任务,常用于保护版权或为网站的图片添加品牌标识。下面我们将深入探讨如何利用PHP实现图片水印功能,并基于提供的`img.php`文件进行详细解析。 首先,我们需要理解基本的图像处理...

    imageTool_imagetool_压缩处理工具_php图形水印_

    "imageTool_imagetool_压缩处理工具_php图形水印_"这个标题表明我们正在讨论一个基于PHP的图像处理工具,它主要用于图片的压缩和添加水印。接下来,我们将深入探讨这些关键知识点。 1. **ImageTool**: 这可能是该...

    PHP为原图片添加水印图片

    使用PHP,为图片添加水印图片。 缩放源水印图片,使其最大宽/高度不能超过原图片。

    php图片添加水印类.zip

    类中应有一个或多个方法用于实际添加水印,如`addWatermark()`。这个方法可能会接收图像资源、水印资源和配置参数作为输入,然后根据这些参数处理图像并保存结果。 5. **获得图片资源**: 在PHP中,可以使用`...

    php生成图片缩略图并添加水印

    生成各种图片缩略图,并支持添加水印 一个生成缩略图的函数 一个添加水印的函数 傻瓜式应用很简单

    php图片添加水印类库

    3. **添加水印**:调用添加水印的方法,这通常会处理配置、计算位置并执行实际的水印绘制。 4. **保存结果**:生成带有水印的新图像文件,覆盖原图或保存为新文件。 5. **释放资源**:操作完成后,释放GD库中的图像...

    PHP给pdf添加多行水印+PHP,pdf+PHP添加水印

    - **加载PDF文件**:使用`$mpdf-&gt;setSourceFile()`方法加载需要添加水印的PDF文件。 - **创建模板**:使用`$mpdf-&gt;importPage()`方法导入PDF页面,然后创建一个模板,以便在上面添加水印。 - **设置水印**:使用`...

    4.PHP使用插件Mpdf 给PDF文件加水印

    在PHP开发中,有时我们需要对PDF文件进行操作,比如添加水印,以保护文档的版权或者增加辨识度。在这种情况下,Mpdf是一款非常实用的PHP库,它允许开发者生成和处理PDF文件,包括添加水印。下面我们将详细介绍如何...

    php文字水印,支持自动换行

    5. **`index.php`**:作为主入口文件,`index.php`很可能是实现这个功能的应用程序核心,它可能包含用户接口、上传图片的逻辑以及调用`image.class.php`中的方法来添加水印并展示结果。 总结来说,实现"php文字水印...

    ke_extramtr_ffmpeg_水印_

    标题"ke_extramtr_ffmpeg_水印_"暗示我们将讨论FFmpeg在水印操作上的应用,而描述中提到的方法是通过Photoshop的阈值功能提取水印。 FFmpeg是一款跨平台的命令行工具,用于处理音频和视频文件,包括转换、编码、...

    watermark 图片水印_DOUPHP图片水印插件_

    总结来说,"watermark 图片水印_DOUPHP图片水印插件"是一个为DOUPHP系统量身定制的工具,能够有效地在上传的商品图片上添加水印,以保护商家的图片版权。通过安装和配置压缩包中的文件,用户可以享受到这一强大的...

    PHP 图片添加水印(文字和图片)

    在PHP中,为图片添加水印是一项常见的任务,可以用于保护版权或增加品牌标识。当在图片上添加文字或图像水印时,有时可能会遇到生成的图片变得模糊的问题。这通常与图片处理过程中的分辨率、缩放、质量设置等因素...

    1.PHP使用插件fpdf fpdi 给PDF文件加水印(中文乱码)

    5. **添加水印**:使用fpdf的`SetFont()`方法设置字体,`SetXY()`设置位置,`Cell()`或`MultiCell()`方法添加文本水印,`Image()`方法添加图片水印。注意,对于中文,你需要确保设置的字体支持中文字符。 ```php $...

    php添加水印

    综上所述,PHP添加水印可以通过GD库或ImageMagick库实现,具体选择取决于项目需求和性能考虑。无论是文本还是图像水印,都可以通过合理的参数设置和定位策略,使水印既不破坏图片整体观感,又能有效地起到保护作用。...

    php图片操作类 php缩放图片 水印添加!

    php图片操作可生成等比例缩略图 和图片水印添加!

    生成水印的php类 生成水印的php类

    在PHP编程领域,生成水印...总的来说,生成水印的PHP类是通过GD库或类似库来实现的,它封装了图像处理的细节,使得在项目中添加水印变得更加方便。了解并掌握这些技术,可以帮助开发者有效地保护和定制他们的数字内容。

    php图片等比缩放和添加水印

    里面提供的是php处理图片的两个方法,一个是对图片进行等比缩放,另一个是对图片添加水印。也可以两者结合应用。在相应的web目录下运行代码,就可以在image目录下看到经过等比缩放处理的有“s_”前缀的图片和经过...

    php 图片压缩添加水印

    - **Imagick水印**:`annotateImage()`方法可以方便地添加水印: ```php $draw = new \ImagickDraw(); $draw-&gt;setFont($font_path); $draw-&gt;setFontSize($font_size); $draw-&gt;setFillColor('white'); $...

    添加水印,PDF Word 等添加水印

    用于添加水印,PDF Word 文档等添加水印

Global site tag (gtag.js) - Google Analytics