
前几天群里有朋友抱怨:扫描版PDF灰蒙蒙的,对比度低,看着费眼睛,想找个工具批量处理一下。我说老马的工具或者PS动作不就行了?他说老马那个得逐页提取,太麻烦;PS倒是能调,但也要一张张导出来,处理完体积还膨胀得离谱。
正好最近在折腾用Claude和ChatGPT写代码,顺手花了点时间做了一个。轮子大概是重复造的——类似功能的工具应该不少——但自己造的轮子,用起来总归放心且顺手。
PDF 扫描件色阶调整工具
解决扫描版 PDF 灰蒙蒙、对比度低的问题。直接处理 PDF 内嵌图片,不拆图不重建,体积可控。
功能
• 自动色阶:自动检测每页黑白场并拉伸,一键搞定大部分灰蒙蒙的扫描件 • 手动色阶:自定义黑场、白场、Gamma,精确控制(类似 Photoshop 色阶) • 实时预览:选择任意页面查看 Before / After 对比,调参满意再处理 • 批量处理:一次添加多个 PDF,排队自动处理 • 体积控制:JPEG 质量可调(30-100),输出体积可控,处理后显示体积对比 • 进度显示:进度条 + 预估剩余时间 • 命令行版: pdf_levels.py可在脚本/自动化场景使用
参数说明
自动色阶模式
手动色阶模式
输出设置
工作原理
1. 用 PyMuPDF 打开 PDF,逐页提取嵌入的扫描图片(xref) 2. 用 Pillow + NumPy 对图片做色阶拉伸 3. 把处理后的图片以 JPEG 编码写回原 xref 位置 4. 保存时启用 garbage=4(清理冗余对象)和deflate=True(压缩非图片流)
这种方式不需要重建页面,PDF 的书签、目录、链接等元数据都会保留。
调参建议
大部分情况:直接用自动色阶默认参数就行,"一键变清晰"。
纸张发黄的旧书扫描:自动色阶 + Gamma 1.2-1.3,裁剪强度 1.0。
对比度还行但整体偏灰:手动模式,黑场 30-50,白场 200-220。
彩色扫描件:同样适用,自动色阶会对 RGB 三通道分别处理。
体积优化:纯文字扫描件可以把 JPEG 质量降到 70-75,视觉差异很小但体积明显缩小。
常见问题
Q: 处理后某些页面变花了?A: 该页可能不是纯扫描图,而是矢量+图片混排。工具只处理每页最大的嵌入图,如果页面结构复杂可能出问题。这种情况建议跳过该页或用其他方式处理。
Q: 处理后体积反而变大了?A: 原 PDF 可能用了更高压缩率的 JPEG 或 JPEG2000。可以降低 JPEG 质量参数,或者原件压缩已经足够好不需要再处理。
Q: 支持加密的 PDF 吗?A: 不支持有密码保护的 PDF。请先用其他工具解密后再处理。

使用时,运行dist目录下的PDFLevels.exe即可。

夜雨聆风