为百度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可能遇到的问题“无法载入mysql扩展” 的解决方法
Apr 16 PHP
php过滤危险html代码
Aug 18 PHP
用PHP+MySQL搭建聊天室功能实例代码
Aug 20 PHP
PHP用strstr()函数阻止垃圾评论(通过判断a标记)
Sep 28 PHP
使用php计算排列组合的方法
Nov 13 PHP
PHP魔术引号所带来的安全问题分析
Jul 15 PHP
PHP实现冒泡排序的简单实例
May 26 PHP
php封装的mysqli类完整实例
Oct 18 PHP
php base64 编码与解码实例代码
Mar 21 PHP
php事务回滚简单实现方法示例
Mar 28 PHP
php-fpm服务启动脚本的方法
Apr 27 PHP
详解PHP 二维数组排序保持键名不变
Mar 06 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
php写的带缓存数据功能的mysqli类
2012/09/06 PHP
php中sprintf与printf函数用法区别解析
2014/02/17 PHP
php检测iis环境是否支持htaccess的方法
2014/02/18 PHP
PHP实现显示照片exif信息的方法
2014/07/11 PHP
php实现无限级分类查询(递归、非递归)
2016/03/10 PHP
PHP实现的限制IP投票程序IP来源分析
2016/05/04 PHP
Yii统计不同类型邮箱数量的方法
2016/10/18 PHP
Yii 框架入口脚本示例分析
2020/05/19 PHP
dwz 如何去掉ajaxloading具体代码
2013/05/22 Javascript
Javascript之this关键字深入解析
2013/11/12 Javascript
利用js(jquery)操作Cookie的方法说明
2013/12/19 Javascript
javascript删除数组元素并且数组长度减小的简单实例
2014/02/14 Javascript
javascript实时获取鼠标坐标值并显示的方法
2015/04/30 Javascript
举例详解Python中smtplib模块处理电子邮件的使用
2015/06/24 Javascript
JavaScript的类型、值和变量小结
2015/07/09 Javascript
JS获取浮动(float)元素的style.left值为空的快速解决办法
2017/02/19 Javascript
js Dom实现换肤效果
2017/10/21 Javascript
Vue 项目中遇到的跨域问题及解决方法(后台php)
2018/03/28 Javascript
使用JavaScript中的lodash编写双色球效果
2018/06/24 Javascript
json数据传到前台并解析展示成列表的方法
2018/08/06 Javascript
解决Vue 项目打包后favicon无法正常显示的问题
2018/09/01 Javascript
微信小程序云函数添加数据到数据库的方法
2020/03/04 Javascript
python自动化测试之setUp与tearDown实例
2014/09/28 Python
Python爬取读者并制作成PDF
2015/03/10 Python
Python字符串替换实例分析
2015/05/11 Python
python微信跳一跳系列之自动计算跳一跳距离
2018/02/26 Python
Python matplotlib学习笔记之坐标轴范围
2019/06/28 Python
python中wheel的用法整理
2020/06/15 Python
关键字throw与throws的用法差异
2016/11/22 面试题
大学专科生推荐信范文
2013/11/23 职场文书
房地产置业顾问岗位职责
2015/04/11 职场文书
Nginx解决前端访问资源跨域问题的方法详解
2021/03/31 Servers
mysql批量新增和存储的方法实例
2021/04/07 MySQL
golang 生成对应的数据表struct定义操作
2021/04/28 Golang
Python源码解析之List
2021/05/21 Python
Mysql超详细讲解死锁问题的理解
2022/04/01 MySQL