为百度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 相关文章推荐
在数据量大(超过10万)的情况下
Jan 15 PHP
php二分法在IP地址查询中的应用
Aug 12 PHP
优化php效率,提高php性能的一些方法
Mar 24 PHP
PHP中其实也可以用方法链
Nov 10 PHP
php中使用$_REQUEST需要注意的一个问题
May 02 PHP
Linux环境下搭建php开发环境的操作步骤
Jun 17 PHP
php函数指定默认值方法的小例子
Dec 04 PHP
php中smarty变量修饰用法实例分析
Jun 11 PHP
PHP怎样用正则抓取页面中的网址
Aug 09 PHP
PHP共享内存使用与信号控制实例分析
May 09 PHP
laravel中的fillable和guarded属性详解
Oct 23 PHP
php设计模式之策略模式实例分析【星际争霸游戏案例】
Mar 26 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
亚洲咖啡有什么?亚洲咖啡产地介绍 亚洲咖啡有什么特点?
2021/03/05 新手入门
用PHP读取flv文件的播放时间长度
2009/09/03 PHP
在PHP中实现Javascript的escape()函数代码
2010/08/08 PHP
PHP自定义函数格式化json数据示例
2016/09/14 PHP
深入讲解PHP的对象注入(Object Injection)
2017/03/01 PHP
javascript中对对层的控制
2006/12/29 Javascript
Javascript 入门基础学习
2010/03/10 Javascript
JS生成不重复随机数组的函数代码
2014/06/10 Javascript
谈谈我对JavaScript DOM事件的理解
2015/12/18 Javascript
JS判断是否长按某一键的方法
2016/03/02 Javascript
jQuery Validate设置onkeyup验证的实例代码
2016/12/09 Javascript
Node.js中如何合并两个复杂对象详解
2016/12/31 Javascript
webpack入门+react环境配置
2017/02/08 Javascript
js实现分页功能
2017/05/24 Javascript
CSS3+JavaScript实现翻页幻灯片效果
2017/06/28 Javascript
详解webpack+angular2开发环境搭建
2017/06/28 Javascript
原生JS实现网页手机音乐播放器 歌词同步播放的示例
2018/02/02 Javascript
Vue实现图片与文字混输效果
2019/12/04 Javascript
vue实现扫码功能
2020/01/17 Javascript
[04:54]DOTA2-DPC中国联赛1月31日Recap集锦
2021/03/11 DOTA
Python Tkinter基础控件用法
2014/09/03 Python
Pycharm远程调试openstack的方法
2017/11/21 Python
pyqt5简介及安装方法介绍
2018/01/31 Python
Python2和Python3.6环境解决共存问题
2018/11/09 Python
Python实现定制自动化业务流量报表周报功能【XlsxWriter模块】
2019/03/11 Python
解决Django migrate不能发现app.models的表问题
2019/08/31 Python
关于win10在tensorflow的安装及在pycharm中运行步骤详解
2020/03/16 Python
基于selenium及python实现下拉选项定位select
2020/07/22 Python
详解Python的爬虫框架 Scrapy
2020/08/03 Python
Servlet的实例是在生命周期什么时候创建的?配置servlet最重要的是什么?
2012/05/30 面试题
专题组织生活会方案
2014/06/15 职场文书
竞选班干部演讲稿100字
2014/08/20 职场文书
父亲节活动策划方案
2014/08/24 职场文书
运动会1000米加油稿
2015/07/21 职场文书
vue Element-ui表格实现树形结构表格
2021/06/07 Vue.js
Go并发4种方法简明讲解
2022/04/06 Golang