WeKnora
Tencent
Open-source LLM knowledge platform: turn raw documents into a queryable RAG, an autonomous reasoning agent, and a self-maintaining Wiki.
PROJECT TOPICS
INSTALL REFERENCE
dsh plugin --profile web add github:zjsthmjialin/pdf-background-gray-codex-skill
该命令指向仓库当前默认分支;尚无绑定当前 commit 的完整验证结果。
PROJECT README
remove-pdf-background-gray 是一个用于扫描型 PDF 的 Codex Skill。它可以去除纸张扫描产生的灰底或偏白底色,同时保持页面尺寸、嵌入图像的原始像素尺寸和文字的连续抗锯齿边缘。
这个项目既可以作为 Codex Skill 自动调用,也可以直接运行其中的 Python 脚本。
remove-pdf-background-gray 也是 DeepSeek Harness (DSH) 插件,一条命令安装:
dsh plugin --profile web add dsh-pdf-background-gray
重启 DSH Web 后,向 Agent 说"把这份扫描 PDF 去底灰"即自动走技能工作流(要求本机 Python 3.10+ 与 python -m pip install pypdf Pillow numpy)。
dsh-pdf-background-gray/ 目录适合以下情况:
不建议直接用于:
处理前建议使用 pdfinfo、pdffonts 和 pdfimages -list 检查 PDF 结构,并先对一页代表性内容做测试。
本 Skill 最初用于处理一份真实扫描 PDF,验证结果如下:
| 项目 | 结果 |
|---|---|
| PDF 页数 | 194 页 |
| 处理的独立图像对象 | 713 个 |
| 页面数量 | 处理前后相同 |
| 页面尺寸与页面框 | 处理前后相同 |
| 嵌入图像像素尺寸 | 处理前后相同 |
| 文字边缘 | 保留连续灰阶抗锯齿,未做黑白二值化 |
| 原文件大小 | 48,838,427 字节,约 46.6 MiB |
| 输出文件大小 | 174,219,856 字节,约 166.1 MiB |
背景灰度在代表页中主要集中于约 252。默认参数保持灰度 230 及以下不变,并将 230 到 252 的高光区域平滑过渡到纯白。
文件体积增大是预期结果:原 PDF 的扫描图像主要使用有损 JPEG 压缩,而处理后为了避免再次损伤文字边缘,改用 Flate 无损压缩。不同 PDF 的体积变化会有明显差异。
上述结果来自一个具体文件,不代表所有 PDF 都会获得相同的视觉效果或体积变化。处理重要资料前请保留原文件并抽查输出。
将仓库克隆到 Codex 的个人 Skills 目录:
git clone https://github.com/zjsthmjialin/pdf-background-gray-codex-skill.git `
"$HOME\.codex\skills\remove-pdf-background-gray"
如果仓库为私有状态,需要先配置 GitHub 凭据或使用 GitHub CLI 登录:
gh auth login
安装完成后重启 Codex,使新 Skill 被自动发现。
把整个项目目录复制到:
%USERPROFILE%\.codex\skills\remove-pdf-background-gray
最终结构中应直接包含 SKILL.md,不要多嵌套一层目录。
可以显式调用 Skill:
使用 $remove-pdf-background-gray 处理 C:\path\input.pdf,去掉扫描底灰,保持原分辨率和文字抗锯齿。
也可以用自然语言触发:
把这个扫描 PDF 的页面底色去除,保持原分辨率不变,文字不要出现锯齿,只去底灰。
Codex 应先检查 PDF 类型和代表页,再调用脚本生成新文件并验证输出。
pypdfPillowNumPy安装依赖:
python -m pip install pypdf Pillow numpy
在项目根目录运行:
python scripts/remove_pdf_background_gray.py `
"C:\path\input.pdf" `
"C:\path\output.pdf"
输入和输出路径必须不同。脚本不会覆盖原文件。
python scripts/remove_pdf_background_gray.py `
"C:\path\input.pdf" `
"C:\path\output.pdf" `
--low 235 `
--white-point 250
| 参数 | 默认值 | 作用 |
|---|---|---|
--low |
230 |
此值及以下保持不变;提高它可保护更多浅灰细节 |
--white-point |
252 |
达到此值时映射为纯白;降低它会更积极地去除较深底灰 |
参数必须满足:
0 <= low < white-point <= 255
调参建议:
--white-point,每次调整 2 到 5。--low,或提高 --white-point。脚本使用 pypdf 读取 PDF,并定位每页引用的图像 XObject。共享的图像对象只处理一次,然后替换原对象的数据流。
这种方式不会把整页重新渲染,因此可以保留:
默认情况下,灰度值 230 及以下完全不变。只对 230 到 252 之间的高光区域计算调整量。
映射使用 smoothstep 曲线:
t = clamp((value - low) / (white_point - low), 0, 1)
smooth = t * t * (3 - 2 * t)
result = value + (255 - value) * smooth
这条曲线在区间两端连续且变化平缓。与“超过某个值就直接变白”的硬阈值相比,它不会突然切断文字边缘的浅灰过渡。
对于 RGB 图像,脚本只处理接近中性灰的高光像素;通道差异较大的彩色像素不会被当作纸张灰底处理。
处理后的像素使用 /FlateDecode 写回 PDF:
/DeviceGray。/DeviceRGB。Flate 是无损压缩,因此不会引入新的 JPEG 方块、振铃或文字边缘模糊。但对于扫描图像,它通常比 JPEG 占用更多空间。
脚本写出 PDF 后会重新打开文件,并检查:
MediaBox 是否一致。任何一项不一致都会抛出错误,而不是把未验证的文件当作成功结果。
这个 Skill 来源于一次实际的 PDF 修复任务,主要步骤如下:
pdfinfo 确认文件共有 194 页并读取页面尺寸。pdffonts 确认文件中没有字体对象,判断文字来自扫描图像。pdfimages -list 检查图像尺寸、DPI、颜色空间和压缩方式。即使脚本内置结构验证,仍建议进行视觉检查:
pdfinfo 比较输入和输出的页数、页面尺寸。pdfimages -list 抽查图像宽高和 DPI。/SMask 或 /Mask 透明蒙版时,脚本会中止,避免破坏透明关系。L 或 RGB 图像会转换为 RGB,特殊印刷色空间需要额外检查。pypdf 的部分内部对象接口;升级依赖后应重新运行样本测试。适当降低 --white-point。建议小步调整,并检查浅灰细节是否仍然完整。
提高 --low 或 --white-point,缩小被调整的高光范围。如果浅灰线与纸张底色亮度接近,自动处理无法完全区分两者。
这是无损 Flate 替代有损 JPEG 后的常见结果。项目优先保证处理后的像素不再经历一次有损压缩。
该 PDF 可能主要由矢量内容构成,或采用了当前脚本未支持的图像组织方式。不要强行处理,应先检查 PDF 结构。
这是保护性中止。需要为该类 PDF 设计专门处理流程,不能简单忽略提示。
remove-pdf-background-gray/
├─ SKILL.md
├─ README.md
├─ agents/
│ └─ openai.yaml
├─ scripts/
│ └─ remove_pdf_background_gray.py
└─ docs/
└─ superpowers/
├─ specs/
│ └─ 2026-06-18-readme-design.md
└─ plans/
└─ 2026-06-18-readme-implementation-plan.md
SKILL.md:Codex 的触发条件、工作流程和安全约束。agents/openai.yaml:Skill 在 Codex 界面中的名称、简介和默认提示词。scripts/remove_pdf_background_gray.py:确定性的 PDF 图像处理和验证脚本。README.md:面向使用者和开发者的项目说明。欢迎提交 Issue 或 Pull Request。反馈问题时,建议提供以下信息:
pypdf、Pillow 和 NumPy 版本。pdfimages -list 摘要。--low 与 --white-point 参数。请勿上传包含个人隐私、合同机密或版权受限内容的原始 PDF。
当前仓库尚未提供许可证文件。在明确添加许可证之前,代码默认保留全部权利;公开使用、修改或再分发前请先联系作者确认授权范围。
CLASSIFICATION EVIDENCE
系统优先读取 GitHub Topics,再与站内分类词典和词根规则比对。当前命中: codex-skill、image-processing、pdf。