返回 Skill 列表
extension
分类: 开发与工程无需 API Key

图片水印

图片水印(watermark)技能。给一张或多张图直接加上文字水印:只需输入文字,可选位置(右下/左下/右上/左上/居中)、透明度、字号、颜色。当用户说「打水印」「加水印」「印上 XX」时触发。直接使用系统字体。不做旋转、平铺等复杂玩法,越简单越好。

person作者: neuhanlihubModelScope

image-stamp — 图片水印

用确定性脚本(Pillow)给图片直接加文字水印。核心原则:只加文字、越简单越好;不覆盖、可校验

工作流程

  1. 拿到水印文字(必填);位置/透明度等没说就用默认,不做复杂询问。
  2. 调用 scripts/watermark.py --text "..."(环境准备见下)。
  3. 核对 JSON(字体、位置、透明度)。
  4. present_files 展示,汇报水印文字与输出。

参数(越少越好)

| 用途 | 参数 | 默认 | |---|---|---| | 水印文字(必填) | --text "XXX" | — | | 位置 | --positionbr 右下 / bl 左下 / tr 右上 / tl 左上 / center 居中 | br | | 透明度 | --opacity 0–100 | 40 | | 字号 | --font-size N | 短边 × 4% 自适应 | | 颜色 | --color '#FFFFFF' | 白 | | 自定义字体 | --font /path/to/font.ttf | 内置 Noto Sans SC | | 多行 | --text "第一行\n第二行" | — | | 编码兜底 | --text-file path.txt(UTF-8) | — |

明确不支持:旋转、满屏平铺、九宫格定位——保持「直接加文字」的最小心智。

字体策略(跨平台,不硬编码)

  • 内置:技能自带 assets/NotoSansSC-Regular.otf(思源黑体,OFL-1.1,附 LICENSE),中文三平台一致。
  • 覆盖--font 优先于内置。
  • 降级:内置字体缺失时扫描系统 CJK 字体兜底;再没有则明确报错(绝不静默出方框)。

必须遵守

  • 透明度合成:RGBA overlay;输出为 JPEG 时自动白底合成并在回复告知。
  • 永不覆盖:输出 原名_wm.png(保原格式),路径永不等于输入。
  • 批量:多张一次传入,不循环调用。
  • 动图/EXIF:GIF 只取首帧并说明;EXIF 自动摆正。

环境准备(跨平台)

同 image-split(python3python/py -3 → 技能目录 .venv,只依赖 Pillow)。

脚本用法

$PY <本技能目录>/scripts/watermark.py IMG1 [IMG2 ...] --text "水印文字" \
  [--position br] [--opacity 40] [--font-size N] [--color '#FFFFFF'] \
  [--font path.ttf] [--text-file path.txt] [--outdir DIR]
  • 每张打印一行摘要 + 末尾 JSON 数组,含 {input, output, position, opacity, font}

示例:

$PY .../scripts/watermark.py photo.jpg --text "© 我的作品"
# photo.jpg -> photo_wm.jpg (text="© 我的作品", pos=br, opacity=40%, font=PingFang)
# [{"input":"photo.jpg","output":".../photo_wm.jpg","position":"br","opacity":40,"font":"PingFang.ttc"}]

完成后的动作

  • present_files 展示打水印后的图
  • 汇报:水印文字、位置、透明度、字体来源、输出文件