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 相关文章推荐
一道求$b相对于$a的相对路径的php代码
Aug 08 PHP
PHP基本语法总结
Sep 06 PHP
试用php中oci8扩展
Jun 18 PHP
php cli配置文件问题分析
Oct 15 PHP
PHP远程调试之XDEBUG
Dec 29 PHP
PHP基于curl后台远程登录正方教务系统的方法
Oct 14 PHP
Yii统计不同类型邮箱数量的方法
Oct 18 PHP
php中10个不同等级压缩优化图片操作示例
Nov 14 PHP
PHP中的日期时间处理利器实例(Carbon)
Jun 09 PHP
laravel实现于语言包的完美切换方法
Sep 29 PHP
PHP字符串与数组处理函数用法小结
Jan 07 PHP
php实现图片压缩处理
Sep 09 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 和 HTML
2006/10/09 PHP
php处理json时中文问题的解决方法
2011/04/12 PHP
PHP实现数组递归转义的方法
2014/08/28 PHP
php循环table实现一行两列显示的方法
2015/06/04 PHP
yii用户注册表单验证实例
2015/12/26 PHP
Laravel 自动生成验证的实例讲解:login / logout
2019/10/14 PHP
jquery之empty()与remove()区别说明
2010/09/10 Javascript
jQuery 下拉列表 二级联动插件分享
2012/03/29 Javascript
javascript 利用Image对象实现的埋点(某处的点击数)统计
2012/12/28 Javascript
JS中操作JSON总结
2020/12/06 Javascript
Javascript中内建函数reduce的应用详解
2016/10/20 Javascript
JS自动生成动态HTML验证码页面
2017/06/14 Javascript
vue中实现在外部调用methods的方法(推荐)
2018/02/08 Javascript
Vue仿支付宝支付功能
2018/05/25 Javascript
JS html事件冒泡和事件捕获操作示例
2019/05/01 Javascript
vue如何自动化打包测试环境和正式环境的dist/test文件
2019/06/06 Javascript
Vue 页面权限控制和登陆验证功能的实例代码
2019/06/20 Javascript
win10环境下python3.5安装步骤图文教程
2017/02/03 Python
Python字典中的键映射多个值的方法(列表或者集合)
2018/10/17 Python
python重试装饰器的简单实现方法
2019/01/31 Python
使用Python将Exception异常错误堆栈信息写入日志文件
2020/04/08 Python
jupyter notebook的安装与使用详解
2020/05/18 Python
python matlab库简单用法讲解
2020/12/31 Python
canvas实现图片马赛克的示例代码
2018/03/26 HTML / CSS
基于html5 canvas做批改作业的小插件
2020/05/20 HTML / CSS
《燕子》教学反思
2014/02/18 职场文书
电子银行营销方案
2014/02/22 职场文书
大学生学习2014全国两会心得体会
2014/03/13 职场文书
《小猪家的桃花树》教学反思
2014/04/11 职场文书
法律专业自荐信
2014/06/03 职场文书
庆元旦活动总结
2014/07/09 职场文书
医药公司采购员岗位职责
2014/09/12 职场文书
村长反四风问题个人对照检查材料
2014/09/21 职场文书
离婚协议书范本及离婚须知
2014/10/15 职场文书
大学生自荐信怎么写
2015/03/26 职场文书
MYSQL 无法识别中文的永久解决方法
2021/06/03 MySQL