1.引入Ueditor 

     <!-- 实例化编辑器 -->
<script type="text/javascript">
window.UEDITOR_HOME_URL ="/Data/ueditor/";
window.onload=function(){
window.UEDITOR_CONFIG.initialFrameHeight=300;    
//window.UEDITOR_CONFIG.initialFrameWidth=1000;
UE.getEditor('content');
}
</script>
<!-- 配置文件 -->
<script type="text/javascript" charset="utf-8" src="/Data/ueditor/ueditor.config.js"></script>
<!-- 编辑器源码文件 -->
<script type="text/javascript" charset="utf-8" src="/Data/ueditor/ueditor.all.js"> </script>

2.加入水印处理类 (随便找了一个)

 <?php
/**
* 加水印类,支持文字图片水印的透明度设置、水印图片背景透明。
* 日期:2011-09-27
* 作者:www.jb51.net
* 使用:
* $obj = new WaterMask($imgFileName); //实例化对象
* $obj->$waterType = 1; //类型:0为文字水印、1为图片水印
* $obj->$transparent = 45; //水印透明度
* $obj->$waterStr = 'www.jb51.net'; //水印文字
* $obj->$fontSize = 16; //文字字体大小
* $obj->$fontColor = array(255,0255); //水印文字颜色(RGB)
* $obj->$fontFile = = 'AHGBold.ttf'; //字体文件
* $obj->output(); //输出水印图片文件覆盖到输入的图片文件
*/
class WaterMask {
public $waterType = 1; //水印类型:0为文字水印、1为图片水印
public $pos = 0; //水印位置
public $transparent = 45; //水印透明度
public $waterStr = 'www.jb51.net'; //水印文字
public $fontSize = 16; //文字字体大小
public $fontColor = array(
255,
0,
255
); //水印文字颜色(RGB)
public $fontFile = 'AHGBold.ttf'; //字体文件
public $waterImg = 'logo.png'; //水印图片
private $srcImg = ''; //需要添加水印的图片
private $im = ''; //图片句柄
private $water_im = ''; //水印图片句柄
private $srcImg_info = ''; //图片信息
private $waterImg_info = ''; //水印图片信息
private $str_w = ''; //水印文字宽度
private $str_h = ''; //水印文字高度
private $x = ''; //水印X坐标
private $y = ''; //水印y坐标
function __construct($img) { //析构函数
$this->srcImg = file_exists($img) ? $img : die('"' . $img . '" 源文件不存在!');
}
private function imginfo() { //获取需要添加水印的图片的信息,并载入图片。
$this->srcImg_info = getimagesize($this->srcImg);
switch ($this->srcImg_info[2]) {
case 3:
$this->im = imagecreatefrompng($this->srcImg);
break 1;
case 2:
$this->im = imagecreatefromjpeg($this->srcImg);
break 1;
case 1:
$this->im = imagecreatefromgif($this->srcImg);
break 1;
default:
die('原图片(' . $this->srcImg . ')格式不对,只支持PNG、JPEG、GIF。');
}
}
private function waterimginfo() { //获取水印图片的信息,并载入图片。
$this->waterImg_info = getimagesize($this->waterImg);
switch ($this->waterImg_info[2]) {
case 3:
$this->water_im = imagecreatefrompng($this->waterImg);
break 1;
case 2:
$this->water_im = imagecreatefromjpeg($this->waterImg);
break 1;
case 1:
$this->water_im = imagecreatefromgif($this->waterImg);
break 1;
default:
die('水印图片(' . $this->waterImg . ')格式不对,只支持PNG、JPEG、GIF。');
}
}
private function waterpos() { //水印位置算法
switch ($this->pos) {
case 0: //随机位置
$this->x = rand(0, $this->srcImg_info[0] - $this->waterImg_info[0]);
$this->y = rand(0, $this->srcImg_info[1] - $this->waterImg_info[1]);
break 1;
case 1: //上左
$this->x = 0;
$this->y = 0;
break 1;
case 2: //上中
$this->x = ($this->srcImg_info[0] - $this->waterImg_info[0]) / 2;
$this->y = 0;
break 1;
case 3: //上右
$this->x = $this->srcImg_info[0] - $this->waterImg_info[0];
$this->y = 0;
break 1;
case 4: //中左
$this->x = 0;
$this->y = ($this->srcImg_info[1] - $this->waterImg_info[1]) / 2;
break 1;
case 5: //中中
$this->x = ($this->srcImg_info[0] - $this->waterImg_info[0]) / 2;
$this->y = ($this->srcImg_info[1] - $this->waterImg_info[1]) / 2;
break 1;
case 6: //中右
$this->x = $this->srcImg_info[0] - $this->waterImg_info[0];
$this->y = ($this->srcImg_info[1] - $this->waterImg_info[1]) / 2;
break 1;
case 7: //下左
$this->x = 0;
$this->y = $this->srcImg_info[1] - $this->waterImg_info[1];
break 1;
case 8: //下中
$this->x = ($this->srcImg_info[0] - $this->waterImg_info[0]) / 2;
$this->y = $this->srcImg_info[1] - $this->waterImg_info[1];
break 1;
default: //下右
$this->x = $this->srcImg_info[0] - $this->waterImg_info[0];
$this->y = $this->srcImg_info[1] - $this->waterImg_info[1];
break 1;
}
}
private function waterimg() {
if ($this->srcImg_info[0] <= $this->waterImg_info[0] || $this->srcImg_info[1] <= $this->waterImg_info[1]) {
die('水印比原图大!');
}
$this->waterpos();
$cut = imagecreatetruecolor($this->waterImg_info[0], $this->waterImg_info[1]);
imagecopy($cut, $this->im, 0, 0, $this->x, $this->y, $this->waterImg_info[0], $this->waterImg_info[1]);
$pct = $this->transparent;
imagecopy($cut, $this->water_im, 0, 0, 0, 0, $this->waterImg_info[0], $this->waterImg_info[1]);
imagecopymerge($this->im, $cut, $this->x, $this->y, 0, 0, $this->waterImg_info[0], $this->waterImg_info[1], $pct);
}
private function waterstr() {
$rect = imagettfbbox($this->fontSize, 0, $this->fontFile, $this->waterStr);
$w = abs($rect[2] - $rect[6]);
$h = abs($rect[3] - $rect[7]);
$fontHeight = $this->fontSize;
$this->water_im = imagecreatetruecolor($w, $h);
imagealphablending($this->water_im, false);
imagesavealpha($this->water_im, true);
$white_alpha = imagecolorallocatealpha($this->water_im, 255, 255, 255, 127);
imagefill($this->water_im, 0, 0, $white_alpha);
$color = imagecolorallocate($this->water_im, $this->fontColor[0], $this->fontColor[1], $this->fontColor[2]);
imagettftext($this->water_im, $this->fontSize, 0, 0, $this->fontSize, $color, $this->fontFile, $this->waterStr);
$this->waterImg_info = array(
0 => $w,
1 => $h
);
$this->waterimg();
}
function output() {
$this->imginfo();
if ($this->waterType == 0) {
$this->waterstr();
} else {
$this->waterimginfo();
$this->waterimg();
}
switch ($this->srcImg_info[2]) {
case 3:
imagepng($this->im, $this->srcImg);
break 1;
case 2:
imagejpeg($this->im, $this->srcImg);
break 1;
case 1:
imagegif($this->im, $this->srcImg);
break 1;
default:
die('添加水印失败!');
break;
}
imagedestroy($this->im);
imagedestroy($this->water_im);
}
}
?>

3.在项目的Applacation 中添加config.json 文件 进行对添加水印配置:

 /* 前后端通信相关的配置,注释只允许使用多行方式 */
{
"waterType":1,/*类型:0为文字水印、1为图片水印*/
"waterImg":"http://127.0.0.8/data/Logo/Logo.png",/*水印图片*/
"waterStr":"www.smartop.xyz",/*水印文字*/
"fontSize":16,/*文字字体大小*/
"fontColor":[0,0,0],/*水印文字颜色(RGB)*/
"fontFile":"./../../Font/ebrimabd.ttf",/*字体文件*/
"transparent":45,/*水印透明度*/
"pos":7,/*水印位置支持 1 2 3 4 5 6 7 8 9 九宫格*/
"imagePathFormat": "/upload/{yyyy}{mm}{dd}/{time}{rand:6}" /* 上传保存路径,可以自定义保存路径和文件名格式 */
/* {filename} 会替换成原文件名,配置这项需要注意中文乱码问题 */
/* {rand:6} 会替换成随机数,后面的数字是随机数的位数 */
/* {time} 会替换成时间戳 */
/* {yyyy} 会替换成四位年份 */
/* {yy} 会替换成两位年份 */
/* {mm} 会替换成两位月份 */
/* {dd} 会替换成两位日期 */
/* {hh} 会替换成两位小时 */
/* {ii} 会替换成两位分钟 */
/* {ss} 会替换成两位秒 */
/* 非法字符 \ : * ? " < > | */
/* 具请体看线上文档: fex.baidu.com/ueditor/#use-format_upload_filename */
}

4.修改controller.php入口文件

将自己的config.json自己的配置加入到配置里面

 $CONFIG = json_decode(preg_replace("/\/\*[\s\S]+?\*\//", "", file_get_contents("config.json")), true);
$SELFCONFIG = json_decode(preg_replace("/\/\*[\s\S]+?\*\//", "", file_get_contents("./../../../../Application/Conf/config.json")), true);
$CONFIG = array_merge($CONFIG,$SELFCONFIG);

5.配置:action_upload.php 将自定义配置项写入:

             "waterType" => $CONFIG['waterType'],
"waterImg" => $CONFIG['waterImg'],
"waterStr" => $CONFIG['waterStr'],
"fontSize" => $CONFIG['fontSize'],
"fontColor" => $CONFIG['fontColor'],
"fontFile" => $CONFIG['fontFile'],
"transparent" => $CONFIG['transparent'],
"pos" => $CONFIG['pos'],

6.配置:Uploader.class.php 增加一个水印处理的私有方法:

     /**
* 添加水印
*/
private function water(){
require_once('Water.class.php');
$obj = new WaterMask($this->filePath); //实例化对象
if($this->config['waterType']){
$obj->waterType = $this->config['waterType'];
$obj->waterImg = $this->config['waterImg']; //水印图片
}else{
$obj->waterType = $this->config['waterType'];
$obj->waterStr = $this->config['waterStr'];//水印文字
$obj->fontSize = $this->config['fontSize']; //文字字体大小
$obj->fontColor = $this->config['fontColor']; //水印文字颜色(RGB)
$obj->fontFile = $this->config['fontFile']; //字体文件
}
$obj->transparent = $this->config['transparent']; //水印透明度
$obj->pos = $this->config['pos']; //水印位置
$obj->output(); //输出水印图片文件覆盖到输入的图片文件
}

Thinkphp 3.1. 3 ueditor 1.4.3 添加水印的更多相关文章

  1. ThinkPHP第十九天(Ueditor高亮插件、扩展函数载入load、静态缓存)

    1.使用Ueditor编辑器,插入代码后,显示的时候高亮显示,需要调用Ueditor中的第三方插件third-party中的SyntaxHighlighter 调用方法: 引入CSS和JS文件,并调用 ...

  2. thinkphp不能够将ueditor中的html文本显示

    因为这个问题花费了我好长时间,非常的急躁.fuck!! 这次我首先在富文本框中输入了一些文本,这些文本是带有样式的,比如是代码.然后存入数据库,但是当我再一次将它取出来打算放入富文本框中的时候,马丹, ...

  3. Dedecmsv5.7整合ueditor 图片上传添加水印

    最近的项目是做dedecmsv5.7的二次开发,被要求上传的图片要加水印,百度ueditor编辑器不支持自动加水印,所以,找了很多资料整合记录一下,具体效果图 这里不仔细写dedecmsv5.7 整合 ...

  4. thinkphp中的Ueditor的使用, 以及如何传递编辑器内容到后台?

    在线编辑器有很多很多, 而且大多是开源的. uediotr基于mit协议, 开源, 可以用于商业和非商业的 任意使用和修改都可以 如果两个相连接的 相邻的 元素之间 因为边框重叠 而显得中间的边框线很 ...

  5. thinkphp给图片打水印不清晰

    项目中打印条形码的函数,从thinkphp自带的water函数修改而来的. 贴上代码: /** * water2 * 改写thinkphp的water函数更强健的函数,增加了写入位置参数 去掉了alp ...

  6. thinkphp 3.2.3整合ueditor 1.4,给上传的图片加水印

    今天分享一下thinkphp 3.2.3整合ueditor 1.4,给上传的图片加水印.博主是新手,在这里卡住了很久(>_<) thinkphp 3.2.3整合ueditor 1.4 下载 ...

  7. Ueditor 1.4.3.1 使用 ThinkPHP 3.2.3 的上传类进行图片上传

    在 ThinkPHP 3.2.3 中集成百度编辑器最新版 Ueditor 1.4.3.1,同时将编辑器自带的上传类替换成 ThinkPHP 3.2.3 中的上传类. ① 下载编辑器(下载地址:http ...

  8. Thinkphp下嵌套UEditor富文本WEB编辑器

    UEditor是由百度web前端研发部开发所见即所得富文本web编辑器,具有轻量,可定制,注重用户体验等特点,开源基于MIT协议,允许自由使用和修改代码... 本文实际操作于ThinkPHP框架下,现 ...

  9. html 实体转换为字符:转换 UEditor 编辑器 ( 在 ThinkPHP 3.2.2 中 ) 保存的数据

    在 ThinkPHP 3.2.2 中使用 UEditor 编辑器保存文章内容时,数据库中保存的数据都被转义成实体,例如:&lt;p&gt;&lt;strong&gt;& ...

随机推荐

  1. Java 继承extends、关键字super和this、多态、动态绑定

    Manager 经理  extends Employee 雇员 "is-a"(是)关系是继承的一个明显特征.每个经理都是一名雇员. 从术语的角度讲,Manager是子类,Emplo ...

  2. PTA——猴子吃桃

    PTA 7-35 猴子吃桃问题 #include<stdio.h> int main() { ; scanf("%d",&n); ; i<n; i++) ...

  3. 【HDOJ图论题集】【转】

    =============================以下是最小生成树+并查集====================================== [HDU] How Many Table ...

  4. linux-----初学命令和理解

    the following Codes has been confirmed by me 1.头部标识[pecool@demo ~]: 其中pecool代表登入用户:demo代表系统名称:~代表当前处 ...

  5. C#获取IIS所有站点及虚拟目录和应用程序(包含名称及详细信息)

    using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...

  6. linux内核编程helloworld(中级)

    传入参数 [root@bogon modules]# cat first.c #include<linux/kernel.h> #include<linux/stat.h> # ...

  7. Introducing Makisu: Uber’s Fast, Reliable Docker Image Builder for Apache Mesos and Kubernetes

    转自:https://eng.uber.com/makisu/?amp To ensure the stable, scalable growth of our diverse tech stack, ...

  8. 使用distillery&&docker 部署phoenix 应用

      distillery 发布了2.0 了,有好多的新的功能 config prodiver 进行环境变量的配置 appup tansforms 插件系统,方便在release 构建的时候进行修改 m ...

  9. NALU数据打RTP包流程详解

    最近在看RTP发送H264数据的文章,感觉很乱,没有比较清晰易懂的教程,自己整理了一下各种资料,备忘! --------Part A  ---- 先说说H264数据,H264在网络传输的是NALU(N ...

  10. 漫谈 C++ 的 内存堆 实现原理

    如果我来设计 C++ 的 内存堆 , 我会这样设计 : 进程 首先会跟 操作系统 要 一块大内存区域 , 我称之为 Division , 简称 div . 然后 , 将这块 div 作为 堆 , 就可 ...