Thinkphp 3.1. 3 ueditor 1.4.3 添加水印
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 添加水印的更多相关文章
- ThinkPHP第十九天(Ueditor高亮插件、扩展函数载入load、静态缓存)
1.使用Ueditor编辑器,插入代码后,显示的时候高亮显示,需要调用Ueditor中的第三方插件third-party中的SyntaxHighlighter 调用方法: 引入CSS和JS文件,并调用 ...
- thinkphp不能够将ueditor中的html文本显示
因为这个问题花费了我好长时间,非常的急躁.fuck!! 这次我首先在富文本框中输入了一些文本,这些文本是带有样式的,比如是代码.然后存入数据库,但是当我再一次将它取出来打算放入富文本框中的时候,马丹, ...
- Dedecmsv5.7整合ueditor 图片上传添加水印
最近的项目是做dedecmsv5.7的二次开发,被要求上传的图片要加水印,百度ueditor编辑器不支持自动加水印,所以,找了很多资料整合记录一下,具体效果图 这里不仔细写dedecmsv5.7 整合 ...
- thinkphp中的Ueditor的使用, 以及如何传递编辑器内容到后台?
在线编辑器有很多很多, 而且大多是开源的. uediotr基于mit协议, 开源, 可以用于商业和非商业的 任意使用和修改都可以 如果两个相连接的 相邻的 元素之间 因为边框重叠 而显得中间的边框线很 ...
- thinkphp给图片打水印不清晰
项目中打印条形码的函数,从thinkphp自带的water函数修改而来的. 贴上代码: /** * water2 * 改写thinkphp的water函数更强健的函数,增加了写入位置参数 去掉了alp ...
- thinkphp 3.2.3整合ueditor 1.4,给上传的图片加水印
今天分享一下thinkphp 3.2.3整合ueditor 1.4,给上传的图片加水印.博主是新手,在这里卡住了很久(>_<) thinkphp 3.2.3整合ueditor 1.4 下载 ...
- Ueditor 1.4.3.1 使用 ThinkPHP 3.2.3 的上传类进行图片上传
在 ThinkPHP 3.2.3 中集成百度编辑器最新版 Ueditor 1.4.3.1,同时将编辑器自带的上传类替换成 ThinkPHP 3.2.3 中的上传类. ① 下载编辑器(下载地址:http ...
- Thinkphp下嵌套UEditor富文本WEB编辑器
UEditor是由百度web前端研发部开发所见即所得富文本web编辑器,具有轻量,可定制,注重用户体验等特点,开源基于MIT协议,允许自由使用和修改代码... 本文实际操作于ThinkPHP框架下,现 ...
- html 实体转换为字符:转换 UEditor 编辑器 ( 在 ThinkPHP 3.2.2 中 ) 保存的数据
在 ThinkPHP 3.2.2 中使用 UEditor 编辑器保存文章内容时,数据库中保存的数据都被转义成实体,例如:<p><strong>& ...
随机推荐
- 【翻译】Context should go away for Go 2
2017/08/06 每次blog.golang.org更新博客,我都迫不及待去读一下:最新的一篇, Contributors Summit,记录了Go贡献者们的一些讨论.我读到一句话,让我感觉得 ...
- 【编程基础】编译器 cc、gcc、g++、CC 的区别
参考 1. 编译器 cc.gcc.g++.CC 的区别; 完
- flask中的request和response
1.request 1.request的常用成员 1.scheme : 获取请求方案(协议) 2.method : 获取本期请求的请求方式(重点) 3.args : 获取使用get请求方式提交的数据 ...
- [LeetCode&Python] Problem 448. Find All Numbers Disappeared in an Array
Given an array of integers where 1 ≤ a[i] ≤ n (n = size of array), some elements appear twice and ot ...
- arcgis server备份还原过程
一.备份过程 1.找到已经安装的arcgis server安装目录,并找到备份工具: 2.快捷键win + R启动cmd,将备份工具文件拖入cmd窗口,enter 3. 通过backup.py脚本进行 ...
- No setter found for property 'cronExpression' in class 'org.springframework.scheduling.quartz.CronTriggerBean'
今天想写个Spring集成Quartz的小Demo,结果报错cronExpression未定义,通过差错,原来是因为Spring 3.0.5与Quartz2.2.2不兼容,Spring3.1以下的只能 ...
- 软件工程 week 01
一.安装与使用Git First项目地址: https://git.coding.net/kefei101/First.git 二.针对以下三个问题,作为大三新生,谈谈我的感想 问题1:你为什么选择计 ...
- iostat iotop 查看硬盘的读写、 free 查看内存的命令 、netstat 命令查看网络、tcpdump 命令
iostat 命令 查看硬盘的使用情况: iostat iostat -x iotop 命令: 若没安装先安装: yum install iotop -y free 命令,用于查看内存的使用量: fr ...
- Python 3.5 in win10 pip install Orange3
http://www.lfd.uci.edu/%7Egohlke/pythonlibs/ 下载Orange3 以及 依赖包 注意网页上标出的Orange 的依赖,以及 https://github.c ...
- 公钥与私钥,HTTPS详解 转载
1.公钥与私钥原理1)鲍勃有两把钥匙,一把是公钥,另一把是私钥2)鲍勃把公钥送给他的朋友们----帕蒂.道格.苏珊----每人一把.3)苏珊要给鲍勃写一封保密的信.她写完后用鲍勃的公钥加密,就可以达到 ...