Kindeditor编辑器添加图片上传水印功能(php代码)


Posted in PHP onAugust 03, 2017

KindEditor 是一套开源的在线HTML编辑器,开发人员可以用 KindEditor 把传统的多行文本输入框(textarea)替换为可视化的富文本输入框。可以无缝地与 Java、.NET、PHP、ASP 等程序集成,比较适合在 CMS、商城、论坛、博客、Wiki、电子邮件等互联网应用上使用。
主要特点:

快速:体积小,加载速度快

开源:开放源代码,高水平,高品质

底层:内置自定义 DOM 类库,精确操作 DOM

扩展:基于插件的设计,所有功能都是插件,可根据需求增减功能

风格:修改编辑器风格非常容易,只需修改一个 CSS 文件

兼容:支持大部分主流浏览器,比如 IE、Firefox、Safari、Chrome、Opera

转到正题,默认的编辑器上传图片时,是没有水印功能的,下面详细介绍:

第一步:修改upload_json.php文件

在编辑器的/php/目录下可以找到这个文件,新增一个函数:

/*
  * 功能:PHP图片水印,水印支持图片或文字
  * 参数:
  * $groundImage 背景图片,即需要加水印的图片,暂只支持GIF,JPG,PNG格式;
  * $waterPos 水印位置,有10种状态,0为随机位置;
  *  1为顶端居左,2为顶端居中,3为顶端居右;
  *  4为中部居左,5为中部居中,6为中部居右;
  *  7为底端居左,8为底端居中,9为底端居右;
  * $waterImage 图片水印,即作为水印的图片,暂只支持GIF,JPG,PNG格式;
  * $alpha 水印透明度,取值1-100;
  * $waterText 文字水印,即把文字作为为水印,支持ASCII码,不支持中文;
  * $textFont 文字大小,值为1、2、3、4或5,默认为5;
  * $textColor 文字颜色,值为十六进制颜色值,默认为#FF0000(红色);
  *
  * $waterImage 和 $waterText 最好不要同时使用,选其中之一即可,优先使用 $waterImage。
  * 当$waterImage有效时,参数$waterString、$stringFont、$stringColor均不生效。
  * 加水印后的图片的文件名和 $groundImage 一样。
*/
function imageWaterMark($groundImage, $waterPos=0, $waterImage='', $alpha=80, $waterText='', $water_fontfile, $textFont=9, $textColor='#FF0000'){
  $isWaterImage = FALSE;
  $formatMsg = '不支持该图片格式!请使用GIF、JPG、PNG格式的图片。';
  $fontFile = $water_fontfile;
  //读取水印文件
  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{
    alert("水印图片不存在!");
  }
  //水印位置
  if($isWaterImage){//图片水印
    $w = $water_w;
    $h = $water_h;
    $label = "图片的";
  }else{//文字水印
    $temp = imagettfbbox($textFont, 0, $fontFile, $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;
    $posY = $ground_h - $h;
    if(!$isWaterImage){
    $posY = $ground_h - $h-20;
    }
    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);//拷贝水印到目标文件
    //生成混合图像
    imagecopymerge($ground_im, $water_im, $posX, $posY, 0, 0, $water_w, $water_h, $alpha);
  } else {//文字水印
    if( !empty($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,100);break;//注意这里的100,经测试,100是图片质量最佳的,但文件大小会增加很多,95的时候质量还不错,大小和原来的差不多。作者采用95的值。
    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);
}

第二步:找到$json = new Services_JSON();注意有两个地方,不是在alert函数里的那个,添加如下代码:

/* 水印配置开始 */
  $water_mark = 1;//1为加水印, 其它为不加
  $water_pos = 9;//水印位置,10种状态【0为随机,1为顶端居左,2为顶端居中,3为顶端居右;4为中部居左,5为中部居中,6为中部居右;7为底端居左,8为底端居中,9为底端居】
  $water_img = $_SERVER['DOCUMENT_ROOT'].'/upfiles/water.gif';//水印图片,默认填写空,请将图片上传至网站根目录的upfiles下,例: water.gif
  $water_alpha = 50;//水印透明度
  $water_text = '';//水印字符串,默认填写空;
  //$water_fontfile = $_SERVER['DOCUMENT_ROOT'] .'/upfiles/fonts/arial.ttf';//文字水印使用的字体;
  if($water_mark == 1){
    imageWaterMark($file_path, $water_pos, $water_img, $water_alpha, $water_text, $water_fontfile);
  }
  /* 水印配置结束 */

经本人测试可以正常使用,另外一点请注意水印图片的路径,根据实际情况而定。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

PHP 相关文章推荐
实现了一个PHP5的getter/setter基类的代码
Feb 25 PHP
PHP实现Socket服务器的代码
Apr 03 PHP
php环境下利用session防止页面重复刷新的具体实现
Jan 09 PHP
php下Memcached入门实例解析
Jan 05 PHP
php中switch与ifelse的效率区别及适用情况分析
Feb 12 PHP
php+mysql实现简单的增删改查功能
Jul 13 PHP
PHP+JS三级菜单联动菜单实现方法
Feb 24 PHP
PHP Class SoapClient not found解决方法
Jan 20 PHP
php nginx 实时输出的简单实现方法
Jan 21 PHP
PHP实现的AES 128位加密算法示例
Sep 16 PHP
ThinkPHP5与单元测试PHPUnit使用详解
Feb 23 PHP
TP3.2框架分页相关实现方法分析
Jun 03 PHP
phpStudy中升级MySQL版本到5.7.17的方法步骤
Aug 03 #PHP
使用PHP json_decode可能遇到的坑与解决方法
Aug 03 #PHP
Yii 2中的load()和save()示例详解
Aug 03 #PHP
Yii2使用表单上传文件的实例代码
Aug 03 #PHP
yii2学习教程之5种内置行为类详解
Aug 03 #PHP
PHP实现的简单在线计算器功能示例
Aug 02 #PHP
利用php操作memcache缓存的基础方法示例
Aug 02 #PHP
You might like
PHP常用开发函数解析之数组篇[未完结]
2012/07/30 PHP
php中用unset销毁变量并释放内存
2020/05/10 PHP
ZeroClipboard插件实现多浏览器复制功能(支持firefox、chrome、ie6)
2014/08/30 Javascript
程序员必知35个jQuery 代码片段
2015/11/05 Javascript
详解jquery事件delegate()的使用方法
2016/01/25 Javascript
深入理解Node.js中的进程管理
2017/03/13 Javascript
angular-tree-component的使用详解
2018/07/30 Javascript
实例分析vue循环列表动态数据的处理方法
2018/09/28 Javascript
使用jquery Ajax实现上传附件功能
2018/10/23 jQuery
jQuery中DOM操作原则实例分析
2019/08/01 jQuery
在layer弹层layer.prompt中,修改placeholder的实现方法
2019/09/27 Javascript
Vue实现手机扫描二维码预览页面效果
2020/05/28 Javascript
vue模块移动组件的实现示例
2020/05/20 Javascript
小程序实现图片移动缩放效果
2020/05/26 Javascript
js轮播图之旋转木马效果
2020/10/13 Javascript
JS pushlet XMLAdapter适配器用法案例解析
2020/10/16 Javascript
[02:05]2014DOTA2西雅图邀请赛 专访啸天mik夫妻档
2014/07/08 DOTA
使用python搭建Django应用程序步骤及版本冲突问题解决
2013/11/19 Python
Win7上搭建Cocos2d-x 3.1.1开发环境
2014/07/03 Python
Python编程对列表中字典元素进行排序的方法详解
2017/05/26 Python
基于numpy中数组元素的切片复制方法
2018/11/15 Python
python2与python3的print及字符串格式化小结
2018/11/30 Python
关于Python 的简单栅格图像边界提取方法
2019/07/05 Python
解决Django提交表单报错:CSRF token missing or incorrect的问题
2020/03/13 Python
python如何求圆的面积
2020/07/01 Python
浅谈keras中Dropout在预测过程中是否仍要起作用
2020/07/09 Python
纯CSS3实现给头像加个光芒四射且旋转的背景动画效果
2014/05/07 HTML / CSS
html table呈现个人简历以及单元格宽度失效的问题解决
2021/01/22 HTML / CSS
竟聘演讲稿范文
2013/12/31 职场文书
电子商务专业求职信
2014/03/08 职场文书
社区服务活动小结
2014/07/08 职场文书
2014医学院领导班子对照检查材料思想汇报
2014/09/19 职场文书
房屋登记授权委托书范本
2014/10/09 职场文书
放假通知
2015/04/14 职场文书
浅析MySQL如何实现事务隔离
2021/06/26 MySQL
Vue3.0 手写放大镜效果
2021/07/25 Vue.js