Thinkphp 3.1. 3 ueditor 1.4.3 添加水印

时间:2022-01-18 21:56:48

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(); //输出水印图片文件覆盖到输入的图片文件
}