为百度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语法(1)
Oct 09 PHP
php FPDF类库应用实现代码
Mar 20 PHP
php邮件发送,php发送邮件的类
Mar 24 PHP
PHP支持多种格式图片上传(支持jpg、png、gif)
Nov 03 PHP
PHP $_FILES中error返回值详解
Jan 30 PHP
一个简单安全的PHP验证码类、PHP验证码
Sep 24 PHP
php获取今日开始时间和结束时间的方法
Feb 27 PHP
php之可变变量的实例详解
Sep 12 PHP
ThinkPHP框架中使用Memcached缓存数据的方法
Mar 31 PHP
PHP中如何使用Redis接管文件存储Session详解
Nov 28 PHP
PHP实现微信提现(企业付款到零钱)
Aug 01 PHP
Laravel (Lumen) 解决JWT-Auth刷新token的问题
Oct 24 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
jquery获取多个checkbox的值异步提交给php的方法
2015/06/24 PHP
9个javascript语法高亮插件 推荐
2009/07/18 Javascript
防止动态加载JavaScript引起的内存泄漏问题
2009/10/08 Javascript
E3 tree 1.6在Firefox下显示问题的修复方法
2013/01/30 Javascript
用JQuery 判断某个属性是否存在hasAttr的解决方法
2013/04/26 Javascript
JavaScript实现向右伸出的多级网页菜单效果
2015/08/25 Javascript
Javascript删除指定元素节点的方法
2016/06/21 Javascript
javascript深拷贝(deepClone)详解
2016/08/24 Javascript
jquery插件bootstrapValidator数据验证详解
2016/11/09 Javascript
简单实现js倒计时功能
2017/02/13 Javascript
JS原生带小白点轮播图实例讲解
2017/07/22 Javascript
详解在vue-cli项目中使用mockjs(请求数据删除数据)
2017/10/23 Javascript
深入理解Vue Computed计算属性原理
2018/05/29 Javascript
利用node 判断打开的是文件 还是 文件夹的实例
2019/06/10 Javascript
vue中更改数组中属性,在页面中不生效的解决方法
2019/10/30 Javascript
浅谈vuex中store的命名空间
2019/11/08 Javascript
微信JSSDK实现打开摄像头拍照再将相片保存到服务器
2019/11/15 Javascript
js+css3实现炫酷时钟
2020/08/18 Javascript
python利用itertools生成密码字典并多线程撞库破解rar密码
2019/08/12 Python
PyCharm中Matplotlib绘图不能显示UI效果的问题解决
2020/03/12 Python
基于Django快速集成Echarts代码示例
2020/12/01 Python
python解包用法详解
2021/02/17 Python
input元素的url类型和email类型简介
2012/07/11 HTML / CSS
25道Java面试题集合
2013/05/21 面试题
两则小学生的自我评价分享
2013/11/14 职场文书
开水果连锁店创业计划书
2013/12/29 职场文书
《猴子种果树》教学反思
2014/04/26 职场文书
学术诚信承诺书
2014/05/26 职场文书
警察群众路线对照检查材料思想汇报
2014/10/01 职场文书
趵突泉导游词
2015/02/03 职场文书
2016大学生求职自荐信范文
2016/01/28 职场文书
在Django中使用MQTT的方法
2021/05/10 Python
Python中threading库实现线程锁与释放锁
2021/05/17 Python
对PyTorch中inplace字段的全面理解
2021/05/22 Python
Java设计模式之享元模式示例详解
2022/03/03 Java/Android
Python用any()函数检查字符串中的字母以及如何使用all()函数
2022/04/14 Python