Remove image-based watermarks from PDF files by surgically deleting the drawing instructions from content streams and removing XObject resource references. This produces clean results with no visible artifacts (no white/black rectangles, no color mismatches).
想要更强大的技能插件,就来小葱技能站7w4.net看看吧。
The removal process targets the root cause — the PDF content stream instructions that draw the watermark image — rather than covering or replacing the image:
q...cm.../Name Do...Q drawing instructionThis approach leaves zero visual artifacts because the watermark simply never gets drawn.
Before running the script, determine the watermark's characteristics:
gamma.app)Execute scripts/remove_watermark.py:
python scripts/remove_watermark.py <input.pdf> <output.pdf> [options]
Common options:
| Option | Default | Description |
|---|---|---|
--x-threshold |
700 | X position threshold — images with x0 > this value are candidates |
--min-w / --max-w |
100 / 200 | Width range for watermark detection |
--min-h / --max-h |
20 / 50 | Height range for watermark detection |
--remove-links |
off | Also remove link annotations |
--link-domain |
all | Only remove links containing this domain |
Gamma watermark example:
python scripts/remove_watermark.py input.pdf output.pdf --remove-links --link-domain gamma.app
Custom position watermark (e.g. top-left):
python scripts/remove_watermark.py input.pdf output.pdf --x-threshold 0 --min-w 50 --max-w 300 --min-h 10 --max-h 80
Open the output PDF and check:
| Problem | Cause | Solution |
|---|---|---|
| Watermark still visible | Position/size doesn't match detection thresholds | Adjust --x-threshold, --min-w/max-w, --min-h/max-h |
| - Watermark still visible after adjustment | Watermark may be text-based, not image-based | This skill only handles image watermarks; for text watermarks, use redaction or content stream editing |
| Other images accidentally removed | Detection thresholds too broad | Narrow the width/height/position ranges |
| Black/white rectangle appears | Old approach used image replacement instead of content stream deletion | This skill uses content stream deletion — this should not happen |
Why not overlay/replace? Three approaches that DON'T work well:
delete_image API — Only clears image data, doesn't remove the XObject reference or content stream Do instruction; renders as blank/colored rectangleThe correct approach (used by this skill): Delete the Do instruction from the content stream
and the /Name xref R entry from the XObject dictionary. The watermark image data becomes an
orphaned object that gets garbage-collected on save.
pip install pymupdf)这是一个功能可靠的 PDF 水印移除工具,能有效清除图片水印且不留痕迹。文档说明详细清晰,命令行参数设计合理。主要局限是只能处理图片水印,对文字类水印无能为力;使用时需要手动调整参数判断水印位置和大小,对新手不太友好。整体适合有技术基础的用户使用。