帮助文档

水印编辑器 — 使用指南

可视化创建视频水印和 Logo 叠加层。支持图片与文本水印、动态防录屏游走、铺满水印、模板变量和 ZWMAP JSON 导出。

概述

水印编辑器是一款基于浏览器的所见即所得编辑工具,用于创建视频水印配置。输出符合 ZWMAP/1.0 规范的 JSON,可由 ZWPlayer 在播放视频时渲染水印。

核心功能:

快速入门

  1. 加载视频:在地址栏粘贴视频 URL,或将本地视频文件拖放到画布区域。
  2. 添加水印:点击"+ 图片水印"或"+ 文本水印"按钮,也可以直接将图片文件拖放到画布上。
  3. 可视化编辑:在画布上拖动水印调整位置,拖动角点调整图片大小。右侧面板实时更新属性。
  4. 配置属性:在详情面板中调整透明度、行为模式、停靠方向、字体设置等。
  5. 导出:点击"导出 JSON"下载配置文件,或点击"复制"将 JSON 复制到剪贴板。

图层类型

图片水印

用于品牌 Logo、频道图标等静态品牌标识。

文本水印

用于版权声明、用户追踪、动态信息显示、防录屏保护。

行为模式

静态停靠

水印固定在指定位置不动。适合品牌 Logo 和固定版权声明。

动态游走

水印在屏幕上移动。是防录屏保护的关键手段。

铺满(仅文本)

文本按倾斜角度和间隔铺满整个屏幕,形成密集的防录屏水印矩阵。仅文本水印支持此模式。

模板变量

文本水印支持 {key} 模板变量,在播放时动态解析。

内置变量

变量说明更新频率
{sys_time}客户端本地时间 (YYYY-MM-DD HH:mm:ss)每秒

自定义变量

任意 {key} 均可使用。值在播放时通过 variables 参数传入。

const player = new ZWPlayer({
  url: 'video.mp4',
  watermarks: config.watermarks,
  variables: {
    user_id: '138****1234',
    user_name: 'John',
    department: 'Engineering',
    ip_address: '192.168.1.100'
  }
});

未解析的变量会在播放器中原样显示。

示例

"Confidential | {department} | {user_name} | {sys_time}"
→ "Confidential | Engineering | John | 2026-05-08 14:30:00"

导出格式

复制 JSON

将 ZWMAP JSON 复制到剪贴板。图片以 Base64 数据 URI 或 URL 原始地址嵌入。

导出 JSON

下载 {title}_watermark.json 文件。

导入 JSON

从本地文件导入 ZWMAP JSON 配置,恢复所有水印图层及其属性。

快捷键

快捷键功能
P切换预览模式
Space播放/暂停视频
Esc退出预览 / 取消选中
Delete删除选中图层
Ctrl+Z撤销
Ctrl+Shift+Z重做
Ctrl+S导出 JSON
Ctrl+V从剪贴板粘贴图片

ZWMAP 协议

水印编辑器输出符合 ZWMAP/1.0 规范的 JSON:

{
  "zwp_protocol": "ZWMAP/1.0",
  "zwp_type": "watermark",
  "zwp_version": "1.0",
  "watermarks": [
    {
      "id": "wm-1",
      "type": "image",
      "behavior": "static",
      "icon": "logo.png",
      "dock": "right",
      "x": "5%", "y": "5%",
      "width": "15%", "height": "15%",
      "opacity": 70
    },
    {
      "id": "wm-2",
      "type": "text",
      "behavior": "dynamic",
      "text": "{user_id} | {sys_time}",
      "font_size": 16,
      "font_color": "rgba(255,255,255,0.3)",
      "opacity": 40,
      "movement": {
        "direction": "diagonal",
        "speed": 2,
        "interval": 0,
        "duration": 0
      }
    },
    {
      "id": "wm-3",
      "type": "text",
      "behavior": "tile",
      "text": "Confidential",
      "font_size": 16,
      "font_color": "rgba(255,255,255,0.15)",
      "opacity": 30,
      "tile": {
        "angle": -30,
        "rowSpacing": 120,
        "colSpacing": 300
      }
    }
  ]
}

水印格式说明

输入格式

ZWPlayer 支持三种水印传入方式:

  1. URL 字符串 — 指向 ZWMAP JSON 文件的地址,播放器自动获取并解析。 — A URL pointing to a ZWMAP JSON file; the player fetches and parses it automatically. — A URL pointing to a ZWMAP JSON file; the player fetches and parses it automatically. — A URL pointing to a ZWMAP JSON file. The player fetches and parses it automatically.
  2. ZWMAP 对象 — 包含完整协议头的 JSON 对象,播放器自动解包内部的 watermarks 数组。 — A JSON object with the full protocol header; the player extracts the inner watermarks array. — A JSON object with the full protocol header; the player extracts the inner watermarks array. — A complete JSON object with protocol headers. The player unwraps the inner watermarks array.
  3. 水印数组 — 直接传入水印对象数组,无需协议头。 — A plain array of watermark objects, no protocol header required. — A plain array of watermark objects, no protocol header required. — A plain array of watermark objects, passed directly without protocol headers.
// URL string
watermarks: 'https://example.com/watermark.json'

// ZWMAP object
watermarks: { zwp_protocol: 'ZWMAP/1.0', zwp_type: 'watermark', watermarks: [...] }

// Plain array
watermarks: [{ type: 'image', behavior: 'static', icon: 'logo.png', ... }]

通用字段

字段类型默认值说明
typestring必填。 "image" 或 "text" "image" or "text" "image" or "text" "image" or "text"
behaviorstring"static""static"(静态)、"dynamic"(动态游走)或 "tile"(铺满)
dockstring"right"X 轴参考原点:"left"(左边缘)或 "right"(右边缘)
xstring"5%"水平位置(像素值或百分比)
ystring"5%"垂直位置(像素值或百分比)
opacitynumber70不透明度 0–100
hiddenbooleanfalse隐藏此水印

图片水印字段

字段类型说明
iconstring必填。 图片 URL 或 Base64 data URI Image URL or Base64 data URI Image URL or Base64 data URI Image URL or Base64 data URI
widthstring宽度(像素值或百分比),默认 "5%"
heightstring高度(像素值、百分比或 "auto")

文字水印字段

字段类型说明
textstring必填。 文本内容,支持 {key} 模板变量 Text content, supports {key} template variables Text content, supports {key} template variables Text content, supports {key} template variables
font_sizenumber字体大小(px),默认 14
font_colorstring字体颜色(RGBA),默认 "rgba(255,255,255,0.4)"

动态游走字段

当 behavior 为 "dynamic" 时,添加 movement 对象:

字段类型默认值说明
movement.directionstring"diagonal""horizontal"、"vertical"、"diagonal" 或 "random"
movement.speednumber2移动速度(1–10)
movement.intervalnumber0隐藏等待时间(秒),0 表示持续显示
movement.durationnumber0每次显示持续时间(秒),0 表示持续显示

铺满水印字段

当 behavior 为 "tile"(仅文字)时,添加 tile 对象:

字段类型默认值说明
tile.anglenumber-30倾斜角度(度),-90 到 90
tile.rowSpacingnumber120行间距(px)
tile.colSpacingnumber300列间距(px)

ZWPlayer 集成

将导出的水印配置与 ZWPlayer 配合使用:

// 1. Load JSON configuration
const config = await fetch('watermark.json').then(r => r.json());

// 2. Initialize ZWPlayer with watermark configuration
const player = new ZWPlayer({
  playerElm: 'video-container',
  url: 'https://example.com/video.mp4',
  watermarks: config.watermarks,
  variables: {
    user_id: '138****1234',
    user_name: 'John',
    department: 'Engineering'
  }
});

集成要点: