组合水印能力的 B 端开放接口:可见水印盲水印嵌入/提取AI 内容标识——渲染内核与前端工具完全一致,配置 schema 相同。
Base URL:http://localhost:8787(自部署;上线后替换为正式域名)
鉴权:Authorization: Bearer p5_xxx 或 query 参数 ?key=p5_xxx。文档站演示 Key:p5_demo0000000000000000000000000(100 次/月)
curl -X POST "http://localhost:8787/v1/watermark/apply?text=Hello&key=p5_demo0000000000000000000000000" \ -H "Content-Type: image/png" \ --data-binary @photo.png \ -o out.png
| 端点 | 方法 | 说明 | 计费 |
|---|---|---|---|
/v1/watermark/apply | POST | 可见水印(文字/Logo 混排、平铺/角标) | 1 次 |
/v1/blind/embed | POST | 盲水印嵌入(响应头 X-Blind-Psnr) | 1 次 |
/v1/blind/detect | POST | 盲水印零原图提取(payload + 置信度) | 1 次 |
/v1/label/ai | POST | AI 内容标识(显式角标 + IPTC 元数据) | 1 次 |
/v1/text/blind | POST | 文本盲水印(零宽字符):mode=encode/decode/strip | 1 次 |
/v1/usage | GET | 用量查询 | 免费 |
① 二进制体:Content-Type: image/png|jpeg,配置走 query;② JSON:{"image": "dataURL或base64", "config": {...}}。
响应:图像端点返回原始字节;blind/detect 返回 JSON。所有鉴权响应带 X-RateLimit-Limit / -Remaining / -Reset,超限返回 429 + Retry-After。
| 参数 | 默认 | 说明 |
|---|---|---|
text | — | 水印文案(与 logo 至少一项) |
logo | — | Logo 图片(base64/dataURL,JSON 形态) |
mode | br | tile|center|tl|tr|bl|br |
density | 3 | 平铺密度 2~10(tile 模式) |
size | 3 | 字号 = 图长边 × n%(1~10) |
logoSize | 6 | Logo 高度 = 长边 × n% |
color | #ffffff | 文字颜色 hex |
opacity | 90 | 不透明度 20~100 |
stroke | 1 | 文字描边(0 关闭) |
format | 跟随输入 | png|jpeg |
quality | 0.92 | JPEG 质量 0.5~1 |
keepExif | 0 | =1 时回植 EXIF 并抹 GPS(JPEG) |
| 参数 | 说明 |
|---|---|
payload | 溯源信息,≤48 字节 UTF-8(embed 必填) |
secret | 提取密钥(embed/detect 必填,必须一致) |
strength | low|mid|high(默认 mid;抗性指标见盲水印工具站攻击实测) |
| HTTP | error | 含义 |
|---|---|---|
| 400 | missing_image / missing_text_or_logo / missing_payload / missing_secret / invalid_json | 参数缺失/非法 |
| 401 | missing_api_key / invalid_api_key | 鉴权失败 |
| 413 | payload_too_large | 请求体超 40MB |
| 415 | unsupported_image_format | 仅支持 PNG/JPEG/WebP |
| 429 | quota_exceeded | 月配额用尽(带 Retry-After) |
// Node.js
const fs = require('fs');
fetch('http://localhost:8787/v1/watermark/apply?text=BrandMark', {
method: 'POST',
headers: { 'Authorization': 'Bearer p5_xxx', 'Content-Type': 'image/png' },
body: fs.readFileSync('photo.png'),
}).then(r => r.arrayBuffer()).then(b => fs.writeFileSync('out.png', Buffer.from(b)));
# 文本盲水印(给合同/文案埋不可见标记)
curl -X POST "http://localhost:8787/v1/text/blind" \
-H "Authorization: Bearer p5_xxx" \
-H "Content-Type: application/json" \
-d '{"mode":"encode","payload":"confidential-42","carrier":"合同正文…"}'
# → {"mode":"encode","text":"合同正文…<不可见零宽字符>"}
# mode=decode 传 text 提取;mode=strip 清除并计数
# Python
import requests
r = requests.post(
"http://localhost:8787/v1/blind/embed",
headers={"Authorization": "Bearer p5_xxx"},
json={"image": open("photo.png", "rb").read().hex(), "payload": "user-42", "secret": "s3cret"},
)
# 或 base64:json={"image": b64, "payload": ..., "secret": ...}
选择图片后点击调用(浏览器直连你部署的服务)
| 档位 | 月额度 | 价格 |
|---|---|---|
| 试用(demo key) | 100 次 | 免费 |
| 入门 | 5,000 | ¥49/月 |
| 标准 | 50,000 | ¥399/月 |
| 盲水印接口 | — | 可见水印 3~5 倍计费(按次折算) |
自部署:见仓库 README(单 Node 进程,npm install && npm start)。© 2026 watermark-api · 使用即表示同意仅对自有内容调用本服务。