去水印工具 (Watermark Remover)
用途
从三类常见文件中去除水印:
- Word 文档 (.docx):移除页眉中嵌入的水印图片 / 文本框 / WordArt,并关闭背景形状显示。
- PDF 文档:移除内容流中的文本水印、注释型水印(FreeText / Stamp / Watermark)。
- 图片:基于图像修复(Inpainting)去除浅色半透明文字 / logo 水印。
何时使用
当用户提供文件并表达以下意图时使用本 skill:
- 去除 / 清除 / 消除文档或图片上的水印
- 处理一批带水印的素材(合同、扫描件、截图、设计稿等)
工作流程
1. 判断文件类型并选择脚本
| 文件类型 | 脚本 | 说明 |
|---|---|---|
.docx |
scripts/remove_word_watermark.py |
直接操作 OOXML,无需第三方库 |
.pdf(文本/注释水印) |
scripts/remove_pdf_watermark.py |
依赖 pypdf |
.pdf(图片型/平铺文字水印) |
scripts/remove_pdf_image_watermark.py |
依赖 pymupdf, opencv-python, numpy |
.png/.jpg/.jpeg/.bmp/.webp |
scripts/remove_image_watermark.py |
依赖 opencv-python, numpy |
| 批量(上述任意混合) | scripts/batch_remove.py |
目录遍历 + 自动分派 + 失败隔离 |
2. 准备运行环境
在调用脚本前,按需安装依赖(仅首次):
pip install pypdf pymupdf opencv-python numpy
3. 执行对应脚本
Word:
python scripts/remove_word_watermark.py <input.docx> [output.docx]
- 自动扫描所有 section 的 header/footer,移除含 watermark 关键字的图片与文本框。
- 同时关闭
settings.xml中的背景形状显示开关。 - 若原文件水印关键字不在内置列表(
watermark/confidential/draft/sample/do not copy等),需先读取文件确认水印形式,再按需扩展关键字(见脚本WATERMARK_HINTS)。
PDF(文本/注释型水印):
python scripts/remove_pdf_watermark.py <input.pdf> [output.pdf] [--text "WATERMARK_TEXT"] [--auto]
--text可精确指定要删除的水印文字(也内置中英文常见词:机密/草稿/样本/严禁复制/内部资料/版权所有/请勿外传/confidential/draft/sample 等)。- 脚本会移除内容流中匹配的文字绘制指令,以及疑似水印的注释对象(
/FreeText//Stamp//Watermark//Artifact、关联/OC图层名为 watermark 的注释)。 --auto:当关键字模式未命中时,额外删除"半透明(/ca <1)文本"指令。更激进,可能误删浅色正文,谨慎使用。- 重要:若水印是图片(扫描件上的 logo),或平铺文字使用字体子集/CID 编码导致文本法失效,改用下方"PDF(图片型/平铺文字水印)"流程。
PDF(图片型 / 平铺文字水印):
# 自动模式(默认检测白色/浅灰色半透明水印,如简历常见水印)
python scripts/remove_pdf_image_watermark.py <input.pdf> [output.pdf] [--dpi 200] [--threshold 8]
# 指定水印 HSV 颜色范围(6 个值)以适配其他颜色水印
python scripts/remove_pdf_image_watermark.py <input.pdf> [output.pdf] --hsv "h_min,s_min,v_min,h_max,s_max,v_max"
- 原理:逐页渲染为高清图 → 局部背景差分 + 低饱和度颜色阈值定位水印 → OpenCV Inpainting 修复 → 合成新 PDF。
- 适用于平铺、倾斜、半透明、字体子集化的白色/浅灰文字水印。代价:输出为图片型 PDF(文字不可选/不可编辑),但视觉上水印被清除。
--threshold控制检测敏感度:数值越小越激进(覆盖更多水印但可能轻微影响浅色正文),默认 8;若仍有残留可降到 5,若误伤正文可升到 12+。- 若自动颜色检测误伤正文,用
--hsv缩小范围。
图片(像素水印):
# 自动模式:默认只在四角/边缘带检测水印(适合角落 logo、AI 生成文字、平台角标)
python scripts/remove_image_watermark.py <input> [output]
# 全图检测(适合平铺/居中水印)
python scripts/remove_image_watermark.py <input> [output] --region all
# 按水印颜色范围精确修复(HSV,6 个值)
python scripts/remove_image_watermark.py <input> [output] --hsv "h_min,s_min,v_min,h_max,s_max,v_max"
# 提供精确蒙版(白色=水印区域)
python scripts/remove_image_watermark.py <input> [output] --mask mask.png
# 选择修复算法 / 半径 / 大模型后端
python scripts/remove_image_watermark.py <input> [output] --method ns --radius 5
python scripts/remove_image_watermark.py <input> [output] --model lama
- 默认方法
telea(快速、边缘自然);ns(Navier-Stokes,纹理更连贯,较慢)。 --region corner(默认):仅在四角/边缘带内搜索,显著降低误伤主体内容的概率,适合绝大多数"角落 logo / AI 生成文字"类水印。--model lama:用 lama-cleaner 大模型修复,复杂纹理/背景上更自然;需先pip install lama-cleaner(及 torch)。脚本会自动检测可用性,不可用时回退 opencv 并提示。当水印覆盖区域纹理复杂(木纹、草地、毛发等)时,脚本会自动建议改用--model lama。- 若自动检测漏掉水印,引导用户提供蒙版或 HSV 范围。
- 中文/特殊字符路径已兼容(内部以字节方式读取与写入)。
4. 批量处理(CLI 入口)
scripts/batch_remove.py 适合一次性处理一个目录或多个文件,按扩展名自动分派到上面的脚本:
# 处理单个目录(默认递归遍历支持的扩展名)
python scripts/batch_remove.py <目录> --recursive --out-dir <输出目录>
# 同时指定多个文件 / 目录
python scripts/batch_remove.py a.pdf b.jpg ./照片 --out-dir ./out --recursive
# 针对批量内的 PDF / 图片微调策略
python scripts/batch_remove.py ./docs --pdf-mode image # 图片型PDF水印(默认text)
python scripts/batch_remove.py ./imgs --img-region all # 图片全图检测(默认corner)
python scripts/batch_remove.py ./imgs --img-model lama # 图片用大模型修复
python scripts/batch_remove.py ./docs --text "机密" # 指定PDF水印文字
特性:
- 不覆盖原文件:输出默认加 _nowm 后缀;用 --out-dir 统一导出。
- 失败隔离:单个文件处理失败/异常会被捕获并记录,不影响其余文件;结束汇总成功/跳过/失败清单。
- 中文路径兼容:内部以字节方式读取图片,规避终端编码问题。
- 支持的扩展名:.docx、.pdf、.png/.jpg/.jpeg/.bmp/.webp。
5. 校验与反馈
- 处理完成后,向用户报告输出路径及移除的疑似水印数量。
- 若某方法无效(如图像型 PDF 水印),明确说明限制并给出替代方案。
- 处理前可建议用户保留原文件备份;脚本默认输出带
_nowm后缀的新文件,不覆盖原文件。
注意事项
- 去水印仅适用于用户自己拥有版权或已获授权的文件,不应用于移除他人版权声明、绕过来源标识等侵犯权益的场景。使用前确认用户对其处理对象有合法处置权。
- 图像修复为算法近似,复杂水印(与不重叠纹理、边缘处)可能留有残影,必要时多试
--method/--radius/--hsv组合。 - 脚本均使用纯 Python 标准库操作 OOXML(Word)或无重依赖逻辑,PDF/图片脚本需
pypdf/opencv-python。