PHP利用ueditor实现上传图片添加水印

吾爱主题 阅读:167 2022-11-11 16:15:00 评论:0

博客在上传图片的时候,我希望能打上我博客链接的水印,掘金,csdn都是这么干的,这事我得学习。

平时的图片上传还好说,在文章编辑的时候,使用ueditor上传图片加水印需要修改ueditor部分PHP的源码,我这里大概记录一下。

首先打开php文件夹下的Uploader.class.php

找到private function upFile(),这是上传文件的主处理方法,

找到122行: $this->stateInfo = $this->stateMap[0];

在这个下面加入:$this->imageWaterMark($this->filePath,9,'logo.png');

 imageWaterMark是自定义的函数,

在下面会说到,$this->filePath 这是上传图片的路径,9 表示的是水印的位置,在右下角,logo.png这个就是你要添加的水印图片了,这个在同一目录下/php/,如果要放到其它路径请用相对路径。

下面这个就是自定义函数了,添加到Uploader 类中 所有的参数都已在函数注释中说明,调用的时候需要注意一下

?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 /*      * 功能: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 一样。      */      private function imageWaterMark( $groundImage , $waterPos =0, $waterImage = "" , $waterText = "" , $textFont =5, $textColor = "#FF0000" )      {          $isWaterImage = FALSE;          $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 *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 - 10;   // -10 是距离右侧10px 可以自己调节                  $posY = $ground_h - $h - 10;   // -10 是距离底部10px 可以自己调节                  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 );      }

好啦,这个就好用了。上传图片加水印就好用了。

请注意:水印功能需要用到GD库模块,请检查下php是否安装了GD库模块。

到此这篇关于PHP利用ueditor实现上传图片添加水印的文章就介绍到这了,更多相关PHP上传图片添加水印内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:https://juejin.cn/post/7116784563619102756

可以去百度分享获取分享代码输入这里。
声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

【腾讯云】云服务器产品特惠热卖中
搜索
标签列表
    关注我们

    了解等多精彩内容