+
-
-
+
+
+
+
+
+
+
+
+
\ No newline at end of file
--
Gitee
From c6a37f9c980556992e312aeecbe1f00ae51931eb Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E5=AD=99=E4=BC=9A=E9=B9=8F?= <1571360448@qq.com>
Date: Mon, 18 Dec 2017 15:24:10 +0800
Subject: [PATCH 3/5] =?UTF-8?q?=E6=B0=B4=E5=8D=B0=E9=85=8D=E7=BD=AE?=
=?UTF-8?q?=E9=A1=B5=20=E5=89=8D=E5=8F=B0=E5=AE=8C=E6=88=90?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
package.json | 1 +
src/controller/ext/mark/config.js | 66 ++++++-----
src/controller/ext/mark/service/demo.js | 13 ---
src/controller/ext/mark/service/mark.js | 53 +++++++++
view/ext/setting.html | 144 +++++++++++++++++++++++-
5 files changed, 232 insertions(+), 45 deletions(-)
delete mode 100644 src/controller/ext/mark/service/demo.js
create mode 100644 src/controller/ext/mark/service/mark.js
diff --git a/package.json b/package.json
index 89f502b9..ac484f82 100644
--- a/package.json
+++ b/package.json
@@ -10,6 +10,7 @@
"dependencies": {
"co-wechat-api": "^3.3.2",
"gt3-sdk": "^2.0.0",
+ "images": "^3.0.1",
"jimp": "^0.2.28",
"lodash": "4.x.x",
"moment": "^2.19.4",
diff --git a/src/controller/ext/mark/config.js b/src/controller/ext/mark/config.js
index 1085731d..5547694c 100644
--- a/src/controller/ext/mark/config.js
+++ b/src/controller/ext/mark/config.js
@@ -2,48 +2,60 @@ module.exports = {
ext: 'mark', // 插件目录,必须为英文
name: '图片水印', // 插件名称
description: '为图片添加水印', // 插件描述
- isadm: 1, // 是否有后台管理,1:有,0:没有,入口地址:'/ext/amrk/admin/index'
+ isadm: 0, // 是否有后台管理,1:有,0:没有,入口地址:'/ext/amrk/admin/index'
isindex: 0, // 是否需要前台访问,1:需要,0:不需要,入口地址:'/ext/amrk/index/index'
version: '1.0', // 版本号
- author: 'shp', // 作者
+ author: '孙会鹏', // 作者
table: [], // 插件包含的 数据库表,不包含表前缀,如:cmswing_ext_table 就是 table,多个['table','table_2']没有留空数组。
sql: '', // 插件安装的时候会找个名字的sql文件导入,默认 插件目录名.sql;
hooks: [], // 挂载的钩子,数组格式,如['hooks1', 'hooks2'],不挂载留空:[]
setting: [
{
- '图片水印设置': [
+ '水印设置': [
{
- 'name': 'title', // 配置在表单中的键名 ,这个会是this.config('title')
- 'label': '显示标题:', // 表单的文字
- 'type': 'text', // 表单的类型:text、radio、select
- 'value': 'cmswing开发团队', // 表单的默认值
- 'html': '说明支持
html'
+ 'name': 'mark',
+ 'label': '图片:',
+ 'type': 'pic',
+ 'value': '960',
+ 'html': '水印图片'
},
{
- 'name': 'width',
- 'label': '显示宽度:',
- 'type': 'select',
- 'options': {'1': '1格', '2': '2格', '4': '4格'},
- 'value': '2'
+ 'name': 'right',
+ 'label': '右边距:',
+ 'type': 'text',
+ 'value': '10',
+ 'html': '只需要填写数字,列如:
10'
},
{
- 'name': 'display',
- 'label': '是否显示:',
- 'type': 'radio',
- 'options': {'1': '显示', '0': '不显示'},
- 'value': '1'
- }
- ]
- },
- {
- '配置项二': [
+ 'name': 'bottom',
+ 'label': '下边距:',
+ 'type': 'text',
+ 'value': '10',
+ 'html': '只需要填写数字,列如:
10'
+ },
{
- 'name': 'p2',
- 'label': '1111',
+ 'name': 'left',
+ 'label': '最小左边距:',
'type': 'text',
- 'value': '1111'
+ 'value': '100',
+ 'html': '只需要填写数字,列如:
100'
+ },
+ {
+ 'name': 'top',
+ 'label': '最小上边距:',
+ 'type': 'text',
+ 'value': '100',
+ 'html': '只需要填写数字,列如:
100'
+ },
+ {
+ 'name': 'state', // 配置在表单中的键名 ,这个会是this.config('title')
+ 'label': '是否启用:', // 表单的文字
+ 'type': 'radio',
+ 'options': {'1': '启用', '0': '禁用'},
+ 'value': '0',
+ 'html': '选择启用后,符合条件的图片将会添加水印'
}
]
}
]
-};
\ No newline at end of file
+};
diff --git a/src/controller/ext/mark/service/demo.js b/src/controller/ext/mark/service/demo.js
deleted file mode 100644
index 7fb9b82c..00000000
--- a/src/controller/ext/mark/service/demo.js
+++ /dev/null
@@ -1,13 +0,0 @@
-module.exports = class extends think.Service {
- constructor(key, secret) {
- super();
- this.key = key;
- this.secret = secret;
- }
- aaa() {
- return `key:${this.key},secret:${this.secret}`;
- }
- bbb(bbb) {
- return bbb;
- }
-};
diff --git a/src/controller/ext/mark/service/mark.js b/src/controller/ext/mark/service/mark.js
new file mode 100644
index 00000000..2095ec47
--- /dev/null
+++ b/src/controller/ext/mark/service/mark.js
@@ -0,0 +1,53 @@
+var images = require('images');
+var path = require('path');
+
+module.exports = class extends think.Service {
+ // 初始化构造函数
+ constructor(...para) {
+ super(para);
+ // 白名单
+ this.suffixs = ['png', 'jpg'];
+ // 边距
+ this.edge = {
+ right: 10,
+ bottom: 10,
+ minLeft: 100,
+ minTop: 100
+ };
+ // 水印路径
+ this.markpath = '/Users/zzu/Desktop/demo/mark.png';
+ }
+
+ // 添加水印
+ mark(imgPath, option) {
+ try {
+ return this.draw(imgPath);
+ } catch (e) {
+ return false;
+ }
+ }
+
+ // 绘制
+ draw(imgPath) {
+ // 存在且是图片
+ if (think.isFile(imgPath) && in_array(path.extname(imgPath), this.suffixs)) {
+ // 加载资源
+ const sourceImg = images(imgPath);
+ const markImg = images(this.markpath);
+ // 计算水印位置
+ const markX = sourceImg.width() - markImg.width() - this.edge.right;
+ const markY = sourceImg.height() - markImg.height() - this.edge.bottom;
+ // 判断最小范围
+ if (markX < this.edge.minLeft || markY < this.edge.minTop) {
+ return false;
+ }
+ // 绘制水印
+ images(sourceImg)
+ // 设置绘制的坐标位置,右下角距离 10px
+ .draw(markImg, markX, markY)
+ // 保存格式会自动识别
+ .save(imgPath);
+ }
+ return true;
+ }
+};
diff --git a/view/ext/setting.html b/view/ext/setting.html
index 869ca625..ae5892af 100644
--- a/view/ext/setting.html
+++ b/view/ext/setting.html
@@ -8,7 +8,8 @@
{%for v in extConfig.setting%}
{%set index = loop.index%}
{% for ingredient, amount in v %}
-
{{ingredient}}
+
{{ingredient}}
{% endfor %}
{%endfor%}
@@ -27,11 +28,140 @@
{%if input.type == 'text'%}
{{forms.text(setting,label= input.label, name= input.name, value=input.value, html= input.html)}}
{%elif input.type == 'radio'%}
- {{forms.radio(setting,label=input.label, name=input.name, value=input.value, options=input.options,html=input.html)}}
+ {{forms.radio(setting,label=input.label, name=input.name, value=input.value,
+ options=input.options,html=input.html)}}
{%elif input.type == 'select'%}
- {{forms.select(setting,label=input.label, name= input.name, value=input.value, options=input.options,html=input.html)}}
+ {{forms.select(setting,label=input.label, name= input.name, value=input.value,
+ options=input.options,html=input.html)}}
{%elif input.type == 'textarea'%}
- {{forms.textarea(setting,label= input.label, name= input.name, value=input.value, html= input.html)}}
+ {{forms.textarea(setting,label= input.label, name= input.name, value=input.value, html=
+ input.html)}}
+ {%elif input.type == 'pic'%}
+
+
+
+
+
{%endif%}
{%endfor%}