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).
The removal process targets the root cause — the PDF content stream instructions that draw the watermark image — rather than covering or replacing the image:
小蔥技能站7w4.net每天更新,海量AI技能等你發現。
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 水印移除工具,能有效清除圖片水印且不留痕跡。文件說明詳細清晰,命令列引數設計合理。主要侷限是隻能處理圖片水印,對文字類水印無能為力;使用時需要手動調整引數判斷水印位置和大小,對新手不太友好。整體適合有技術基礎的使用者使用。