为百度UE编辑器上传图片添加水印功能


Posted in PHP onApril 16, 2015

UEditor编辑器上传图片是自动提取的,但是图片没有水印功能,下面小编和各位一起来看看。

UEditor编辑器没有上传图片加水印的功能,需要进行二次开发,本例是在PHPCMS系统中对百度编辑器进行二次开发,添加上传图片加水印功能。

首先打开UEditor编辑器文件目录的php文件夹,打开Uploader.class.php,把PHPCMS添加水印的方法复制过来,加到这个类所有成员方法最后面,然后进行修改如下:

//图片加水印
public function watermark($source, $target = '', $w_pos = '', $w_img = '', $w_text = '99danji',$w_font = 8, $w_color = '#ff0000') {
  $this->w_img = 'watermark.png';
  $this->w_pos = 9;
  $this->w_minwidth = 400;
  $this->w_minheight = 200;
  $this->w_quality = 80;
  $this->w_pct = 85;
 
  $w_pos = $w_pos ? $w_pos : $this->w_pos;
  $w_img = $w_img ? $w_img : $this->w_img;
  //if(!$this->watermark_enable || !$this->check($source)) return false;
  if(!$target) $target = $source;
  //$w_img = PHPCMS_PATH.$w_img;
  //define('WWW_PATH', dirname(dirname(dirname(__FILE__)));
  $w_img = '../../../images/water/'.$w_img;
  $source_info = getimagesize($source);
  $source_w  = $source_info[0];
  $source_h  = $source_info[1];
  //if($source_w < $this->w_minwidth || $source_h < $this->w_minheight) return false;
  switch($source_info[2]) {
    case 1 :
      $source_img = imagecreatefromgif($source);
      break;
    case 2 :
      $source_img = imagecreatefromjpeg($source);
      break;
    case 3 :
      $source_img = imagecreatefrompng($source);
      break;
    default :
      return false;
  }
  if(!empty($w_img) && file_exists($w_img)) {
    $ifwaterimage = 1;
    $water_info  = getimagesize($w_img);
    $width    = $water_info[0];
    $height    = $water_info[1];
    switch($water_info[2]) {
      case 1 :
        $water_img = imagecreatefromgif($w_img);
        break;
      case 2 :
        $water_img = imagecreatefromjpeg($w_img);
        break;
      case 3 :
        $water_img = imagecreatefrompng($w_img);
        break;
      default :
        return;
    }
  } else {    
    $ifwaterimage = 0;
    $temp = imagettfbbox(ceil($w_font*2.5), 0, PC_PATH.'libs/data/font/elephant.ttf', $w_text);
    $width = $temp[2] - $temp[6];
    $height = $temp[3] - $temp[7];
    unset($temp);
  }
  switch($w_pos) {
    case 1:
      $wx = 5;
      $wy = 5;
      break;
    case 2:
      $wx = ($source_w - $width) / 2;
      $wy = 0;
      break;
    case 3:
      $wx = $source_w - $width;
      $wy = 0;
      break;
    case 4:
      $wx = 0;
      $wy = ($source_h - $height) / 2;
      break;
    case 5:
      $wx = ($source_w - $width) / 2;
      $wy = ($source_h - $height) / 2;
      break;
    case 6:
      $wx = $source_w - $width;
   $wy = ($source_h - $height) / 2;
      break;
    case 7:
      $wx = 0;
      $wy = $source_h - $height;
      break;
    case 8:
      $wx = ($source_w - $width) / 2;
      $wy = $source_h - $height;
      break;
    case 9:
      $wx = $source_w - $width;
      $wy = $source_h - $height;
      break;
    case 10:
      $wx = rand(0,($source_w - $width));
      $wy = rand(0,($source_h - $height));
      break;       
    default:
      $wx = rand(0,($source_w - $width));
      $wy = rand(0,($source_h - $height));
      break;
  }
  if($ifwaterimage) {
    if($water_info[2] == 3) {
      imagecopy($source_img, $water_img, $wx, $wy, 0, 0, $width, $height);
    } else {
      imagecopymerge($source_img, $water_img, $wx, $wy, 0, 0, $width, $height, $this->w_pct);
    }
  } else {
    if(!empty($w_color) && (strlen($w_color)==7)) {
      $r = hexdec(substr($w_color,1,2));
      $g = hexdec(substr($w_color,3,2));
      $b = hexdec(substr($w_color,5));
    } else {
      return;
    }
    imagestring($source_img,$w_font,$wx,$wy,$w_text,imagecolorallocate($source_img,$r,$g,$b));
  }
  
  switch($source_info[2]) {
    case 1 :
      imagegif($source_img, $target);
      break;
    case 2 :
      imagejpeg($source_img, $target, $this->w_quality);
      break;
    case 3 :
      imagepng($source_img, $target);
      break;
    default :
      return;
  }
 
  if(isset($water_info)) {
    unset($water_info);
  }
  if(isset($water_img)) {
    imagedestroy($water_img);
  }
  unset($source_info);
  imagedestroy($source_img);
  return true;
}
 
public function check($image) {
  return extension_loaded('gd') && preg_match("/\.(jpg|jpeg|gif|png)/i", $image, $m) && file_exists($image) && function_exists('imagecreatefrom'.($m[1] == 'jpg' ? 'jpeg' : $m[1]));
}

对比我修改的部分,由于phpcms水印可以在后台管理设置,phpcms自带的水印方法通过读取配置文件获取路径,和读取数据库设置获取参数设置,那么这些地方需要手动进行设置。

对了,在upFile方法还要添加一段函数:

if ($this->watermark) {

    $this->watermark($this->filePath,$this->filePath);

}

然后打开UEditor百度编辑器php目录下的action_upload.php文件,加上是否添加水印的参数:

/* 上传配置 */
$base64 = "upload";
switch (htmlspecialchars($_GET['action'])) {
  case 'uploadimage':
    $config = array(
      "pathFormat" => $CONFIG['imagePathFormat'],
      "maxSize" => $CONFIG['imageMaxSize'],
      "allowFiles" => $CONFIG['imageAllowFiles']
    );
    $fieldName = $CONFIG['imageFieldName'];
    $watermark = true;
    break;

然后在后面还有一句要改成:

/* 生成上传实例对象并完成上传 */

$up = new Uploader($fieldName, $config, $base64, $watermark);

这样就大功告成了,本文主要是提供思路和参考。

以上所述就是本文的全部内容了,希望大家能够喜欢,能够对大家使用ue编辑器有所帮助。

PHP 相关文章推荐
目录,文件操作详谈―PHP
Nov 25 PHP
php在线生成ico文件的代码
Oct 09 PHP
PHP strtok()函数的优点分析
Mar 02 PHP
jQuery EasyUI API 中文文档 - DateBox日期框
Oct 15 PHP
在PHP中使用X-SendFile头让文件下载更快
Jun 01 PHP
采用thinkphp自带方法生成静态html文件详解
Jun 13 PHP
php字符串函数学习之substr()
Mar 27 PHP
php导出中文内容excel文件类实例
Jul 06 PHP
四个常见html网页乱码问题及解决办法
Sep 08 PHP
php通过header发送自定义数据方法
Jan 18 PHP
Laravel框架源码解析之入口文件原理分析
May 14 PHP
浅谈如何提高PHP代码质量之单元测试
May 28 PHP
php+ajax实现的点击浏览量加1
Apr 16 #PHP
PHP中curl_setopt函数用法实例分析
Apr 16 #PHP
微信公众平台开发实现2048游戏的方法
Apr 15 #PHP
PHP获取毫秒级时间戳的方法
Apr 15 #PHP
基于php的微信公众平台开发入门实例
Apr 15 #PHP
微信公众平台实现获取用户OpenID的方法
Apr 15 #PHP
php实现格式化多行文本为Js可用格式
Apr 15 #PHP
You might like
德生9700DX电路分析
2021/03/02 无线电
php实现随机显示图片方法汇总
2015/05/21 PHP
JavaScript 笔记二 Array和Date对象方法
2010/05/22 Javascript
初学Jquery插件制作 在SageCRM的查询屏幕隐藏部分行的功能
2011/12/26 Javascript
HTML页面滚动时获取离页面顶部的距离2种实现方法
2013/09/05 Javascript
用C/C++来实现 Node.js 的模块(二)
2014/09/24 Javascript
jquery.uploadify插件在chrome浏览器频繁崩溃解决方法
2015/03/01 Javascript
js中的内部属性与delete操作符介绍
2015/08/10 Javascript
基于jquery步骤进度条源码分享
2015/11/12 Javascript
AngularJS基础 ng-paste 指令简单示例
2016/08/02 Javascript
jQuery通过ajax方法获取json数据不执行success的原因及解决方法
2016/10/15 Javascript
NodeJS处理Express中异步错误
2017/03/26 NodeJs
Vue实例中生命周期created和mounted的区别详解
2017/08/25 Javascript
nodejs用gulp管理前端文件方法
2018/06/24 NodeJs
深入理解移动前端开发之viewport
2018/10/19 Javascript
基于Webpack4和React hooks搭建项目的方法
2019/02/05 Javascript
详解js 创建对象的几种方法
2019/03/08 Javascript
详解JS判断页面是在手机端还是在PC端打开的方法
2019/04/26 Javascript
JS 事件机制完整示例分析
2020/01/15 Javascript
Nuxt默认模板、默认布局和自定义错误页面的实现
2020/05/11 Javascript
vue项目查看vue版本及cli版本的实现方式
2020/10/24 Javascript
[04:03]2014DOTA2西雅图国际邀请赛 LGD战队巡礼
2014/07/07 DOTA
python 读取摄像头数据并保存的实例
2018/08/03 Python
python在回调函数中获取返回值的方法
2019/02/22 Python
Python实现 PS 图像调整中的亮度调整
2019/06/28 Python
Python爬虫图片懒加载技术 selenium和PhantomJS解析
2019/09/18 Python
tensorflow使用指定gpu的方法
2020/02/04 Python
python字符串替换re.sub()实例解析
2020/02/09 Python
想学画画?python满足你!
2020/12/24 Python
使用html5新特性轻松监听任何App自带返回键的示例
2018/03/13 HTML / CSS
捷克家居装饰及图书音像购物网站:Velký košík
2018/04/16 全球购物
专营店会计助理岗位职责
2013/11/29 职场文书
八年级数学教学反思
2014/01/31 职场文书
搞笑的婚礼主持词
2015/06/29 职场文书
利用 SQL Server 过滤索引提高查询语句的性能分析
2021/07/15 SQL Server