ARTICLE · 1355194
【开源】一行命令把 PDF 做旧成扫描件:反向操作:不修复扫描件,而是把干净的 "降级"成它
【开源】一行命令把 PDF 做旧成扫描件:反向操作:不修复扫描件,而是把干净的 "降级"成它你有没有遇到过这种情况—— 手上是干净的电子 PDF,对方却只要"扫描件"。为了一个文件,专门跑一趟打印店,或者翻出吃灰的扫描仪,甚至把手机举歪了拍一页纸。 GitHub 上刚冒出来的 make-look-scanned 说:别折腾了,我帮你"扫"一遍。 
make-look-scanned 是一个用 Go 写的命令行工具,方向与绝大多数 PDF 工具相反:不清理扫描件,而是把干净的电子 PDF 主动"降级"成"从纸质打印件扫出来"的样子。 页面倾斜、灰度、米黄纸调、扫描颗粒、失焦模糊、边缘暗角、JPEG 压缩伪影——每一项都能单独调。 用法简单到发指: 这个品类其实不空,而且有个 3500+ 星的成熟网页对手——lookscanned.io(2022 年上线,Vue + MIT)。 面对这样一个已经站稳脚跟的竞品,多数人会在"做得更好"或"做得更大"上卷。而 make-look-scanned 的作者 overflowy 选了一条反常识的路:不做网页,做 CLI;不用 Vue,用 Go;不要随机,要确定性。 结果很打脸:上线 3 天拿到 362 星,7 天 426 星,如今已 800+ 星。 它的爆火不是因为"做得更好",而是因为做得不同——它卡住了一个 lookscanned.io 给不了的位置:自动化场景。 它的全部"魔力"来自三步: 第一步:栅格化。用 go-fitz(MuPDF 的 Go 绑定)把每一页按 150 DPI 渲染成 RGBA 位图。150 DPI 正是家用扫描仪的典型分辨率——看得清,又"扫描味"十足。 第二步:效果管线。灰度、暖纸色、倾斜、颗粒、模糊、边缘阴影依次叠加。每个参数都是独立旋钮,数值设为 0 即关闭该效果。
第三步:重组。把处理完的位图用 gopdf 打包成一个全新的纯图片 PDF。 这里有个"诚实"的细节:原 PDF 的可选文字层会彻底消失,输出就是一张图——和一台基础扫描仪的行为一模一样。 1. 静态链接 MuPDF,零运行时依赖 go build 出一个二进制就完事,用户不用装 poppler、ImageMagick、Ghostscript。代价是编译需要 C 工具链,但"一次编译,到处运行"。 2. 确定性输出——这个品类里几乎没人做到 默认随机种子取自输入 PDF 的内容哈希,同一个文件不管跑多少遍,结果一模一样。再配合 --seed N,相同输入 + 相同种子能得到字节级一致的 PDF——方便复现和回归测试。 3. 浏览器版:用 PDF.js 替换 MuPDF MuPDF 编不了 WASM,作者就换个思路:浏览器里用 PDF.js 栅格化页面,像素交给同一套 Go 效果代码编译成的 wasm 处理。最终能打包成约 8MB 的单文件 HTML,内联 wasm + PDF.js,双击离线可用。 免费开源,无账号、无限制✅ 文件永远不上传——合同、证件、票据这类敏感文件纯本地处理,这是这个品类的刚性要求 ✅ 文字会"消失"成图片:输出是纯图片 PDF,不可选中、不可搜索、不可复制。如果对方要可复制的电子 PDF,这个工具不适用。 许可证是 AGPL-3.0:CLI 因静态链接 MuPDF,整体为 AGPL,二次分发需提供源码;个人本地用完全没问题,但集成进商业 SaaS 前建议让法务评估一下。 vs lookscanned.io(3500+ 星网页工具) 
结论:这不是竞争,是互补。偶尔手动处理单文件选 lookscanned.io;要接进自动化流程选 make-look-scanned。 vs 其他方案 
make-look-scanned 干的事很无聊——把干净的 PDF 弄脏。但它干得不糊弄:内容哈希做种子、为确定性专门挑库、特效顺序有讲究、WASM 和 CLI 共享代码。 GitHub:overflowy/make-look-scanned(AGPL-3.0) 下次再遇到"只要扫描件"的要求,别急着翻扫描仪——打开终端,一行命令就够了。 8元解锁820+优质项目!别再瞎找资料了!AI、低代码、Agent实战教程一网打尽,永久更新!
一行命令把 PDF 做旧成扫描件

它是什么
make-look-scanned in.pdf # 默认输出 in.scanned.pdfmake-look-scanned in.pdf -o out.pdfmake-look-scanned in.pdf --noise 0.4 --skew 2.5 --jpeg-quality 30
项目是怎么来的
一个脚本要自动处理一批待发文件,网页工具就没法用了。这时候只有命令行能接进流程。
原理:一条干净的流水线
PDF 矢量页 → 栅格化成位图 → 过一遍效果管线 → 组装回纯图片 PDFFlag | 默认值 | 作用 |
|---|---|---|
--skew | 0.6 | 页面歪斜角度 |
--grayscale | true | 灰度化 |
--paper-tone | 0.6 | 暖纸色调强度 |
--noise | 0.08 | 扫描颗粒 |
--blur | 0.4 | 高斯失焦 |
--edge-shadow | 0.15 | 边缘暗角 |
--jpeg-quality | 70 | JPEG 压缩瑕疵 |
真正值钱的三个设计
一套算法,CLI 和浏览器共享——这是 Go 转 WASM 的漂亮实践。
优点与适用边界
优点
三个入口:Go CLI(批处理)、浏览器在线版、单 HTML 离线版 ✅
参数全可调 + 预设:常用组合写进 config.toml,用 --preset 调用 ✅
确定性可复现,适合测试和自动化 ✅
注意两点
横向对比


一句话总结
开源地址
https://github.com/overflowy/make-look-scanned














































































