mcpField
W
watermark-removal

watermark-removal

github.com/faas-tech创意与媒体0180 次安装34 周前更新
代码仓库

关于 watermark-removal

这是用于移除图片水印的命令行技能,适合需要自动检测或保留尺寸进行修复的图像处理流程。它会将疑似 Google SynthID 图片路由到裁剪法,其他水印则使用 OpenCV 修复。

主要功能

  1. 01自动检测并路由 SynthID
  2. 02检测水印所在角落
  3. 03OpenCV Navier-Stokes 修复
  4. 04裁剪、涂抹和强力处理方法
  5. 05单张图片与批量处理

适用场景

  1. 01移除单张图片中的水印
  2. 02批量处理文件夹中的图片
  3. 03使用修复法保留图片尺寸

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/faas-tech/extend-my-claude-code --skill watermark-removal

安装后在 Claude Code 中输入/watermark-removal确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

references/
synthid-watermark.md
scripts/
batch-process.py
remove-watermark.py

详细介绍

通用水印移除

使用智能检测和经过验证的方法,从任意图片来源移除水印。智能路由:自动检测 Google SynthID,并使用经过验证的强力方法;对于未知类型的水印,则回退到基于 ML 的修复。

快速开始

单张图片 — 智能自动检测(推荐)
# Smart detection: Google SynthID → aggressive method (proven), Unknown → inpaint (ML)
python .claude/skills/watermark-removal/scripts/remove-watermark.py \
  input.png \
  output.png
单张图片 — 保留尺寸(强制使用 ML)
# Force ML inpainting even for Google SynthID (preserves exact dimensions)
python .claude/skills/watermark-removal/scripts/remove-watermark.py \
  input.png \
  output.png \
  --method inpaint
批量处理(请先征得用户同意!)

⚠️ 重要: 批量处理前务必先询问用户,尤其是使用会改变尺寸的裁剪/强力方法时。

# Recommended: Preserves dimensions
python .claude/skills/watermark-removal/scripts/batch-process.py \
  /path/to/input-dir \
  /path/to/output-dir \
  --method inpaint

# Alternative: Fast but crops 120px (requires user approval)
python .claude/skills/watermark-removal/scripts/batch-process.py \
  /path/to/input-dir \
  /path/to/output-dir \
  --method aggressive

智能检测系统 ⭐ 新功能

此技能会自动检测 Google SynthID 水印,并选择最佳移除方法:

Google SynthID 检测

分析的特征:

  • RGBA 模式(带 Alpha 通道的 PNG 格式)
  • 尺寸较大(宽度和高度均 >1500px)
  • 常见的 Google AI 宽高比(1.83、1.0、1.5、1.78,容差为 10%)
  • 自动检测水印所在角落

智能路由逻辑:

  1. 如果检测到 Google SynthID → 使用 aggressive 方法(已验证效果出色)

    • 从检测到的角落裁剪 120px
    • 移除 Alpha 通道水印
    • 覆盖任何残留部分
    • 对 Google AI 图片的处理效果始终可靠
  2. 如果是未知/其他水印 → 使用 inpaint 方法(基于 ML)

    • 保留原始尺寸
    • 使用 OpenCV Navier-Stokes 算法
    • 适用于任意水印类型
覆盖默认行为
# Force ML inpainting even for Google SynthID (preserves dimensions)
python scripts/remove-watermark.py input.png output.png --method inpaint

# Force aggressive method for non-Google watermarks
python scripts/remove-watermark.py input.png output.png --method aggressive

# Disable auto-detection (assume bottom-right corner)
python scripts/remove-watermark.py input.png output.png --no-detect

方法

修复方法(质量最佳)⭐ 新功能

功能: 基于 ML 的修复,并自动检测水印

特点:

  • 自动检测水印位置(任意角落)
  • 使用 OpenCV 的 Navier-Stokes 修复算法
  • 智能填充水印区域,使其与周围图案融合
  • 适用于任意水印类型(不只是 Google SynthID)

优点:

  • 效果质量最高
  • 保留原始尺寸
  • 适用于位于任意角落的水印
  • 能智能处理复杂背景
  • 通用性强,适用于所有水印类型

缺点:

  • 需要安装 OpenCV(pip install opencv-python)
  • 比裁剪方法稍慢
  • 处理特别大的水印时可能需要调整参数

适用场景:

  • 需要尽可能高的质量
  • 水印位于复杂/细节丰富的背景上
  • 必须保留原始尺寸
  • 处理非 Google 水印
强力方法(快速可靠)

功能: 自动检测角落,裁剪 120px,移除 Alpha 通道,并覆盖残留部分

优点:

  • 快速可靠
  • 自动检测水印所在角落
  • 能正确处理 RGBA 图片
  • 适合批量处理

缺点:

  • 图片尺寸会缩小 120px
  • 可能裁掉边缘附近的内容

适用场景:

  • 快速处理大量图片(批量处理的默认方法)
  • 可以接受缩小尺寸
  • Google SynthID 水印
裁剪方法

功能: 自动检测并裁剪水印所在角落

优点:

  • 速度最快
  • 自动检测
  • 处理最少

缺点:

  • 可能残留水印
  • 无法处理 Alpha 通道水印

适用场景:

  • 速度优先
  • 需要快速预览
覆盖方法

功能: 不裁剪,直接覆盖水印(不自动检测)

优点:

  • 保留原始尺寸
  • 方法简单

缺点:

  • 只会处理右下角
  • 可能留下明显瑕疵
  • 不如修复方法可靠

适用场景:

  • 纯色背景上的简单水印
  • 兼容旧版

重要指南

尺寸保留优先级

平衡领域知识与尺寸保留

  1. 智能默认行为:

    • 检测到 Google SynthID → 使用 aggressive 方法(已证明效果完美,会裁剪 120px)
    • 未知水印 → 使用 inpaint 方法(保留尺寸)
  2. 可由用户覆盖:

    • 使用 --method inpaint 标志强制保留尺寸
    • 使用 --method aggressive 标志强制裁剪
  3. 批量裁剪需要用户批准:

    • 如果使用 aggressive 方法处理多张 Google SynthID 图片
    • 说明该方法会将图片尺寸缩小 120px
    • 获取明确确认
    • 显示处理前后的尺寸
批量处理协议

未经用户确认,绝不开始批量处理:

  1. 说明处理内容:

    • 要处理的图片数量
    • 将使用的方法
    • 是否会保留或更改尺寸
  2. 获取明确批准:

    • “我将使用 [method] 方法处理 X 张图片。此操作[会/不会]更改尺寸。是否继续?”
  3. 优先选择非破坏性处理:

    • 批量处理时默认使用 inpaint
    • 仅当用户明确表示速度优先于质量时,才使用 aggressive

工作流

1. 识别带水印的图片

常见水印类型:

  • Google SynthID: 角落处的小星形/闪光图标
  • 图库照片: 徽标或文字叠加
  • AI 服务: 角落徽章(Midjourney、DALL-E)
  • 相机水印: 日期/时间戳
2. 选择方法

智能默认工作流(新增):

  1. 运行脚本时不添加 --method 标志——智能检测会自动选择最佳方法
  2. 检测到 Google SynthID → 使用 aggressive 方法(已证明效果完美)
  3. 未知水印 → 使用 inpaint 方法(基于 ML,可保留尺寸)
  4. 如有需要,使用 --method 标志覆盖

方法选择指南:

  • 智能自动(推荐): 不添加标志(检测到 Google SynthID → 使用 aggressive,否则 → 使用 inpaint)
  • 强制保留尺寸: --method inpaint(基于 ML,适用于任何水印)
  • 强制使用 Google 方法: --method aggressive(裁剪 120px,非常适合 SynthID)
  • 速度优先: --method crop(速度最快,会裁剪,但可能留下残留)
  • 旧版: --method paint(基础方法,可保留尺寸,但可靠性较低)
3. 处理图片

智能自动检测(推荐):

python scripts/remove-watermark.py input.png output.png

强制保留尺寸:

python scripts/remove-watermark.py input.png output.png --method inpaint

快速批量处理:

python scripts/batch-process.py ./input ./output --method aggressive

禁用自动检测(强制处理右下角):

python scripts/remove-watermark.py input.png output.png --method inpaint --no-detect
4. 验证结果
  • 检查输出图片的角落是否干净
  • 确认没有裁掉重要内容
  • 确认水印已完全移除

命令参考

remove-watermark.py
python scripts/remove-watermark.py INPUT OUTPUT [OPTIONS]

Arguments:
  INPUT                 Input image path
  OUTPUT                Output image path

Options:
  --method {crop|inpaint}   Removal method (default: crop)
  --size INT               Watermark size in pixels (default: 60)
batch-process.py
python scripts/batch-process.py INPUT_DIR OUTPUT_DIR [OPTIONS]

Arguments:
  INPUT_DIR             Directory with images to process
  OUTPUT_DIR            Directory for cleaned images

Options:
  --method {crop|inpaint}   Removal method (default: crop)
  --pattern PATTERN        File pattern to match (default: *.png)
  --size INT               Watermark size in pixels (default: 60)

示例

示例 1:网站图片

场景: 用户有 3 张用于网站的 Google AI 图片,需要去除水印

# Batch process all PNG images
python scripts/batch-process.py \
  ./public/images \
  ./public/images-clean \
  --method crop \
  --pattern "*.png"

输出:

Found 3 images to process
Input: ./public/images
Output: ./public/images-clean
Method: crop

[1/3] Processing: ad-design-bedroom.png
   ✅ Saved to: ad-design-bedroom.png
[2/3] Processing: ad-design-kitchen.png
   ✅ Saved to: ad-design-kitchen.png
[3/3] Processing: ad-designs-bathroom.png
   ✅ Saved to: ad-designs-bathroom.png

✅ Successfully processed: 3/3
示例 2:保留精确尺寸

场景: 客户需要精确的 1920x1080 图片,不能裁剪

python scripts/remove-watermark.py \
  hero-image.png \
  hero-image-clean.png \
  --method inpaint
示例 3:较大的水印

场景: 水印比平常更大(70px)

python scripts/batch-process.py \
  ./images \
  ./images-clean \
  --method crop \
  --size 70

技术详情

参见 references/synthid-watermark.md,了解:

  • SynthID 水印规格
  • 方法对比详情
  • 边缘情况和注意事项
  • 法律/道德准则

依赖项

必需:

  • Python 3.7+
  • Pillow (PIL):pip install Pillow
  • NumPy:pip install numpy

可选(用于 ML 修复):

  • OpenCV:pip install opencv-python

安装所有依赖项:

pip install Pillow numpy opencv-python

注意: inpaint 方法需要 OpenCV。其他方法无需安装 OpenCV。

提示

性能:

  • 裁剪方法比修复快 5-10 倍
  • 处理 100 张以上图片时,使用裁剪方法

质量:

  • 使用 quality=95 保存,以尽量减少压缩
  • PNG 格式比 JPEG 更能保留画质

备份:

  • 始终保留带水印的原始图片
  • 处理副本,不要处理原图

测试:

  • 批量处理前先测试一张图片
  • 如有需要,使用 --size 标志验证水印尺寸

评论

支持 Markdown