扫描件底纹压平与灰度图彩色重建:GIMP实战
做图像处理这行的都有一个共同的体会:客户或者同事甩过来一张图,说"这个能不能修一下",往往比十页需求文档更能考验人。我最近就接到了这么一活——一张只有复印件、原件的彩色扫描早在搬家时丢了,现在要归档,手里这张是灰度扫描的,纸上还压着一层扫描时带出来的底纹水印,字看着发灰,印章是一坨黑。需求很朴素:把这张黑白扫描件恢复成有色泽的彩色版本,看着像个正常扫描件,能入库、能打印、能翻查。
这类活儿的核心技术点就三块:底纹水印的压平、灰度图的色彩重建、局部区域的分离上色。工具不用多贵,GIMP 免费、跨平台、脚本能力强,做这件事绰绰有余。适合谁看?手上有一堆老旧扫描件要归档的行政、法务、财务同事;也适合刚接触图像处理、想搞明白"图层模式到底在算什么"的新手。我把这次的操作全流程、参数取值逻辑、踩过的坑整理成下面这篇,你照着抄作业就能跑通,同时也能明白每一步为什么要这么干。
1. 这个活儿的边界在哪:先想清楚再动鼠标
动手之前必须先泼一盆冷水。很多人以为"黑白转彩色"是一个按钮的事,实际上它至少是三种性质完全不同的操作,搞混了就是白干。
1.1 "黑白改彩色"其实是三件完全不同的事
第一件叫信息还原。原图本身是彩色的,只是扫描参数没调好、或者被转成了灰度保存,色彩信息在文件里已经丢了,但至少明暗层次还在,我们能通过白平衡、通道拉伸把它拉回一个合理的观感。这件事有上限,但做出来像模像样。
第二件叫色彩重建。原图是真正的单通道灰度文件,红色的印章、蓝色的签字笔、纸张的米黄色,所有色相信息一个字都没留下来。这种情况下没有"还原"可言,只有"重建"——按常识给特定亮度区间的像素重新赋予颜色。这是绘制,不是修复。
第三件叫底纹压平。扫描件上那层灰蒙蒙的水印、复印机带出来的条纹、纸张纤维的不均匀反射,属于低频背景噪声。这跟颜色无关,是空间频率的问题,得单独处理。
我这次拿到的文件属于第二和第三种的组合:灰度 JPEG,背景有明显底纹。所以整个方案是"先压平,再重建,最后局部精修"。顺序不能反——你在一张底纹没处理干净的图上上色,等于给脏玻璃刷漆,后面全白搭。
注意:这类操作只适用于你自己合法持有材料的电子化归档、个人存档整理。任何对外提交的场景,都应当使用原件或通过正式渠道获取的电子文件。技术上能做的事,和应该做的事,中间隔着一道明确的线。
1.2 用途红线与原图质量的三条硬判据
判断一张图值不值得花两小时去修,我一般看三条。
判据一:有效分辨率。A4 幅面 300dpi 对应 2480×3508 像素。低于 150dpi(1240×1754),文字边缘已经开始糊,修出来的东西打印会露馅。我的经验值是正文笔画宽度至少要有 2 个像素,否则曲线一拉就是一团黑。
判据二:动态范围。打开直方图看一眼,如果像素全挤在中间一小段、两头都是空的,说明扫描时曝光就废了,可拉伸的空间极小。理想状态是白场贴到 250 以上、黑场低于 30,中间灰调均匀分布。
判据三:有没有不可逆的阈值化。有些扫描仪默认开"文本增强"或者"黑白二值",出来的是纯 0 和 255 两个值,中间什么都没有。这种图你去修,就是在给一张只有 1bit 信息的图片"补"色彩,效果必然是色块拼接。判断方法很简单:放大到 400%,看文字边缘有没有抗锯齿的过渡灰。没有,就是二值化的。
| 判据 | 合格线 | 不合格的表现 | 处理建议 |
|---|---|---|---|
| 分辨率 | ≥300dpi | 文字笔画不足 2px | 重新扫描,别硬修 |
| 动态范围 | 白场≥250,黑场≤30 | 直方图挤在中间 | 可尝试曲线拉伸,效果有限 |
| 灰度层次 | 文字边缘有过渡灰 | 纯黑纯白二值图 | 放弃精细修复,只能做示意性上色 |
| 色彩信息 | 文件为 RGB 模式 | 单通道灰度 | 只能重建,不能还原 |
2. 开工前的底图处理与 GIMP 基础配置
底图处理这一步最容易被跳过,但它决定了后面 70% 的工作量。我见过太多人一上来就开始调色,调了半天发现是图歪的、边缘有扫描仪黑边、分辨率根本不够,全部重来。
2.1 底图能救不能救,30秒判断法
打开文件先做四件事,按顺序来。
第一步,确认色彩模式。图像 → 模式,看"RGB"前面有没有点。如果是"灰度"被勾选,那说明文件里只有单通道。先别急着转 RGB,转了也不会凭空长出颜色,只是给后面上色做准备。这个认知很关键:模式转换不等于信息恢复。
第二步,看图像属性。图像 → 图像属性 → 分辨率。我这次的文件是 200dpi、1654×2339 像素,勉强够用,但打印会虚。处理完可以再插值放大到 300dpi,用"图像 → 缩放图像",插值算法选"NoHalo"或者"LoHalo",比默认的线性插值边缘更干净。
第三步,量一下倾斜角。用测量工具(Shift+M)沿着一条水平参考线拉一下,状态栏会显示角度。超过 0.5 度就必须转正,否则后面所有基于水平垂直的蒙版、选区都会偏。旋转用"图像 → 变换 → 顺时针/逆时针旋转 90°"只解决大角度,"任意旋转"解决小角度,转完记得"图像 → 画布适应到图层"再裁掉多余的黑角。
第四步,检查有没有扫描黑边。复印机扫出来的图四边常带 3-8 像素的黑边或灰边,直接用矩形选择裁掉,宁可比原稿少裁 2 毫米,也别把内容切了。
提示:这四步做完先另存一个
xxx_01_base.xcf。GIMP 的 XCF 格式保留图层、蒙版、通道、撤销历史,是唯一能让你中途反悔的格式。所有中间成果都存 XCF,最后才导出 JPG/PNG。
2.2 GIMP 的几项必改设置
GIMP 的默认配置是给普通修图用的,做扫描件处理得改几个地方。
内存与撤销。编辑 → 首选项 → 系统资源,把"撤销步数"调到 64 以上。扫描件处理动辄几十步微调,撤销不够用会让你反复重做,非常折磨。缓存大小按你机器内存的 25% 给,8G 内存给 2G 足够。
取样阈值。工具箱里的"按颜色选择"工具有个阈值参数,默认 15。处理扫描件时这个值我通常拉到 30-45,因为扫描件同一片区域的像素值抖动很大,阈值太小会选出一堆碎点。但也不能太大,超过 60 就会把相邻的浅色区域一起吃掉。
前景/背景色的快速重置。按 D 键恢复黑白,按 X 键交换。这两个快捷键在处理蒙版时用得非常频繁,肌肉记忆练起来。
性能开关。滤镜 → 模糊 → 高斯模糊这类滤镜,在"首选项 → 显示 → 渲染"里可以调预览精度。大图处理时把预览精度从"高"降到"中",响应速度会明显提升,最终计算结果不受影响。
| 设置项 | 默认值 | 建议值 | 原因 |
|---|---|---|---|
| 撤销步数 | 32 | 64-128 | 微调频繁,避免反复重做 |
| 颜色选择阈值 | 15 | 30-45 | 扫描件像素抖动大,避免碎点选区 |
| 插值算法 | 线性 | NoHalo | 文字边缘更锐利,减少光晕 |
| 预览精度 | 高 | 中 | 大图滤镜响应快,不影响输出 |
3. 核心流程一:把背底水印压平
底纹是这张图最大的敌人。它不是某个具体形状,而是整张纸上不均匀的灰度起伏——左边深右边浅,或者呈斜向条纹。这种低频噪声不处理,你后面无论怎么拉曲线,都会把底纹一起拉上天。
3.1 为什么"橡皮擦"是最差的选择
新手最直觉的做法是拿橡皮擦把灰的地方擦白,或者用"颜色选择"选中灰色区域填白。这两种做法我都不推荐,原因很实在。
橡皮擦的问题是破坏性。它直接改像素,你擦重了没法回退到中间状态,只能撤销重来。而且扫描件的底纹是渐变的,边缘永远擦不干净,会留下一圈毛茸茸的过渡带,比不擦更难看。
颜色选择填充的问题是误伤。扫描件里浅色文字、印章的浅色部分、纸张的浅灰底纹,三者灰度值高度重叠。你一选,文字也跟着没了。
真正靠谱的思路是除法归一化:假设整张图等于"理想图像 × 背景亮度分布",那么用原图除以背景估计,就能把背景除掉,只留下理想图像。这个数学表达写出来很简单:
结果 = 原图 / 背景估计 × 255
背景估计怎么来?把原图做一次大半径高斯模糊,模糊半径要大于文字笔画宽度,这样文字就被"抹平"了,剩下的就是背景的低频分布。这一步在 GIMP 里用图层模式实现,三分钟搞定。
3.2 除法归一化:三步去掉不均匀底纹
具体操作,跟着做。
第一步,复制背景层。右键图层 → 复制图层,把新层命名为"背景估计"。选中它,滤镜 → 模糊 → 高斯模糊,参数先给 25 像素(这是 200-300dpi 下的常用起点)。注意勾选"预览",你会看到文字彻底糊没了,只剩一片朦胧的明暗。
第二步,改图层模式。在图层对话框顶部把"模式"从"正常"改成"划分"(英文界面是 Divide)。这个模式的算法就是拿下层像素除以上层像素再乘以 255。理论上一步就能把底纹除掉,但实际效果往往偏亮,因为背景估计里混进了文字的暗部。
第三步,调不透明度找平衡。把"背景估计"层的不透明度从 100% 往下降,我这次最后落在 65% 左右。降到什么程度算合适?盯着文字看:文字要黑得扎实,底纹要平得看不出边界,两者兼顾的那个点就是答案。这个值没有标准,跟你的扫描质量强相关,我的经验区间是 50%-80%。
处理完合并图层,你会发现原来那片灰蒙蒙的斜纹基本平了,直方图上原本散在 100-200 之间的那一坨像素,现在收拢到了 220-250 的窄区间。这就是成功压平的信号。
注意:如果你的 GIMP 版本里"划分"模式效果发白严重(有些版本对 0 值有特殊处理),可以换个思路——把"背景估计"层反相(颜色 → 反相),模式改成"线性减淡",再调不透明度。两种思路目的一致,都是"用背景除掉背景",哪种顺手用哪种。
3.3 参数怎么定:模糊半径、不透明度与阈值
模糊半径不是随便拍的,它有明确的物理依据:必须大于文字笔画宽度,小于你想保留的结构尺度。
拿我这张图算一下。200dpi 下,A4 纸宽 210mm 对应 1654 像素,也就是每毫米约 7.9 像素。正文用的五号字,笔画宽度大约 0.25mm,换算下来约 2 像素。那么模糊半径只要大于 2 像素就能糊掉文字?不行,太小了会留下文字的模糊残影。实际取值一般是笔画宽度的 8-10 倍,取 20-25 像素比较稳妥。
上界是什么?如果你希望保留页面上大的色块渐变(比如纸张边缘的自然阴影),模糊半径就不能大过这个渐变的空间尺度。这台机器扫出来的底纹条纹周期大约 15 像素,模糊半径取 25 就能完全盖住。
| 参数 | 依据 | 本次取值 | 调整方向 |
|---|---|---|---|
| 高斯模糊半径 | 笔画宽度 × 8-10 | 25 px | 文字残留则加大,底纹去不净则减小 |
| 图层模式不透明度 | 底纹残留与文字发灰的平衡点 | 65% | 底纹明显则升高,文字发白则降低 |
| 输出白场目标 | 纸张应当接近纯白 | 245-250 | 高于 252 会丢失纸张质感 |
| 输出黑场目标 | 文字应当接近纯黑 | 10-20 | 压到 0 会让细笔画断线 |
处理完这一步,还有个收尾动作:颜色 → 色阶,把输入白场从 255 拉到 250,输入黑场从 0 拉到 15,输出范围不动。这一步叫"收窄动态范围",作用是给后面的上色留出操作余量。如果你把白场直接顶到 255,之后任何一点提亮都会立刻溢出成纯白,没法再做细节。
4. 核心流程二:从灰度到彩色的重建
底纹平了,接下来是最核心也最容易被误解的部分。这里我必须把一句话说在前面:灰度图的上色不是"恢复",是"重建",所以判断标准不是"像不像原件",而是"符不符合常识"。
4.1 通道拆分与色彩信息体检
在动手之前,先做一次体检。图像 → 模式 → RGB,把图转成三通道。然后窗口 → 可停靠对话框 → 通道,打开通道面板。
这时候你会看到红、绿、蓝三个通道缩略图。如果三个通道的缩略图完全一模一样,那就坐实了这是真灰度图,色相信息为零,后面只能靠重建。如果三个通道有细微差异,恭喜,说明原文件保住了部分色彩信息,可以走"还原"路线——也就是把通道拉开做色阶,让隐藏的色彩浮现出来。
两种情况的具体做法不一样:
- 有通道差异:分别对三个通道做"颜色 → 色阶",把各自的输入白场拉到 240-250,让饱和度自然提升。或者直接"颜色 → 色相-饱和度",饱和度拉到 20-40,观察是否出现意料之外的颜色。
- 三通道完全一致:别浪费时间在色阶上了,直接进入重建流程。
我这张图属于后者,严格一致的灰度。所以下面讲的全是重建思路。
4.2 整体色调重建:色彩化与曲线配合
整张图的基调,我建议用"颜色 → 色彩化"(Colorize)先铺一层。
原理很简单:把图像从 RGB 转到 HSL 色彩空间,保持明度 L 不变,给你一个色相 H 和饱和度 S 的控制杆。你调 H 和 S,整张图就统一染上那个色调,明暗关系完全不动。这比什么"照片滤镜""色彩平衡"都要干净。
纸张的米黄色,色相大概在 40-50 度(橙黄区),饱和度我给 8-12。这个值很低,因为真实纸张的白是很微妙的,饱和度一过 15 就变成"旧报纸"了。色相也别太黄,超过 60 度就成了牛皮纸。
调的时候有个技巧:把图像缩放到 50% 观察,别盯着 100% 看。大图放大后,人眼会被局部细节干扰,对小范围的色彩偏差不敏感。缩到 50% 看到的整体色调,才是最终成品给人的印象。
铺完整体色调,再用"颜色 → 曲线"或者"色阶"微调明暗。这里的关键是分段调整:不要一根曲线从头拉到尾,而是在中间加两个控制点,让暗部(文字)保持深,中间调(纸张)提亮,亮部(高光)不溢出。
| 调整项 | 建议取值 | 判断依据 | 常见错误 |
|---|---|---|---|
| 色彩化色相 | 40-50 度 | 接近米白纸色 | 超过 60 度变黄纸 |
| 色彩化饱和度 | 8-15 | 肉眼几乎看不出,但对比有温度 | 超过 25 明显发黄 |
| 中间调提亮 | +8 到 +15 | 纸张显得干净 | 提太多丢失纸纹 |
| 暗部压缩 | 不压缩 | 保留文字边缘灰阶 | 压到纯黑会断笔画 |
4.3 局部上色:印章、签名、边框的分离处理
整体色调只是底子,真正让图"活起来"的是局部区域。这张图上有三个需要单独处理的元素:红色印章、蓝色签字、以及页面抬头可能有的彩色标识。
关键是先分离,再上色。分离的方法靠亮度阈值,因为在灰度图里,不同颜色的物体虽然色相丢了,但亮度通常还保留着差异。
红色印章在扫描件里的典型亮度是 90-150(8bit),因为它比白纸暗、比黑字亮。这个区间就是我们的选择依据。具体操作:
- 选中"背景估计"合并后的层,右键 → 添加 Alpha 通道(GIMP 里叫"添加透明通道")。
- 选择 → 按颜色选择,点一下印章区域,阈值给 35,勾选"从选区中减去"和"合并"两种模式交替试。
- 选中之后,图层 → 蒙版 → 添加图层蒙版,初始选"选区"。
- 在蒙版上按 Ctrl+I 反相,然后用白色柔边画笔(硬度 30%,大小按需)把边缘修一修,把误选进蒙版的文字笔画涂黑。
- 给这一层新建一个"颜色"模式的图层,填充红色(约
#C0282D),或者直接在蒙版层上做"颜色 → 色彩化"给 0 度色相、饱和度 60。
为什么用"颜色"图层模式?因为这个模式的算法是只取上层的色相和饱和度,明度完全沿用下层。也就是说,你填一片纯红,下面的明暗层次一点不丢,印章的浓淡、印泥的颗粒感全在。这是给灰度图上色最正确的模式,没有之一。
签字笔的蓝色同理,只是它的亮度区间更宽(因为笔迹粗细不均),蒙版需要手动修得更多。我的做法是先用阈值粗选,然后进"快速蒙版"(按 Q 键)用画笔精修边界,最后退出快速蒙版,选区自动变成蒙版。
至于页面上的彩色标识或者边框,如果原图完全没有痕迹,我建议不要凭空加。判断依据是:有明暗痕迹的地方才上色,纯白区域强行加颜色,一眼就假。
4.4 蒙版手工修边与羽化
蒙版修边是整个流程里最耗时、也最见功力的部分。这里分享几个实操细节。
第一,羽化半径别太大。蒙版边缘羽化 1-2 像素足够。羽化 5 像素以上,印章边缘会糊成一团,打印出来像洇了水。羽化参数的设置位置在"选择 → 羽化",输入值建议按当前分辨率算:300dpi 下 1.5 像素约等于 0.13mm,这是肉眼刚能察觉的柔和度。
第二,用"快速蒙版"而不是直接画。按 Q 进入快速蒙版,未选中区域会被一层红色(可改)覆盖,你用黑白画笔涂抹就等于加选/减选。改覆盖色的位置在快速蒙版对话框里双击色块。把颜色改成高对比的青色,比默认红色更容易分辨边界。
第三,善用"选择 → 收缩/扩展"。选区边缘常常比目标大一圈或者小一圈。收缩 1 像素、再羽化 1 像素,是通用的"收紧边缘"组合拳。
第四,图层蒙版上做高斯模糊要谨慎。有人喜欢整个蒙版模糊一下求柔和,这是错的。模糊蒙版会让所有边缘一起糊,包括本来很锐利的直线边框。正确做法是只在需要柔和的地方局部处理。
提示:所有蒙版操作都在 XCF 里保留,别急着合并。等所有局部颜色都铺完、整体效果确认了,再"图像 → 拼合图像"。中途合并了想改一个印章边缘,就得从头再来。
4.5 最后一步的整体校准
局部上色做完,退出来看整体。这时候常见的问题是"局部颜色太跳"或者"整张图发灰"。
校准方法一:用"颜色 → 自动 → 白平衡"。这个功能会把最亮的像素认定为白、最暗的认定为黑,重新拉伸。副作用是可能把纸张的米黄调成冷白。如果调完之后觉得"太冷",撤销,改用色阶手动拉,把白场定在 248 而不是 255。
校准方法二:看直方图。窗口 → 可停靠对话框 → 直方图。理想状态下,像素分布应该有三个峰:一个在 20-40(文字),一个在 100-160(印章和其它中调元素),一个在 235-250(纸张)。三个峰之间的谷底要平滑,出现尖刺说明有像素被过度拉伸了。
校准方法三:打印预览对比。导出前按 Ctrl+Shift+P 打印预览,屏幕上好看的图打印出来往往偏暗。如果条件允许,先导一张小样打印出来比对,这一步花的时间,比你在屏幕上反复调色省得多。
5. 自动化与批量:把重复动作交给 Script-Fu
单张修完就完了?如果手上还有二十张同类扫描件,手工重复就是灾难。GIMP 的 Script-Fu 可以让这些动作跑起来,虽然它的语法看起来有点年头,但对付这种固定流程足够用。
5.1 从手动到脚本的思路
写脚本之前,先把你要固化的动作"参数化"。哪些是固定的、哪些是每张图都变的,得分清楚。
固定的:模糊半径、图层模式、输出格式、白黑场目标值。 可变的:旋转角度、裁剪框、印章的亮度阈值、上色的色相值。
写脚本的原则是只自动化固定部分,可变部分留人工。我见过有人想把整条流程全自动,结果每张图都要调参数,脚本反而成了负担。我这次的脚本只做三件事:批量转 RGB、批量做除法归一化压底纹、批量色阶收窄。剩下的裁剪、上色,还是手工来。
5.2 一段可直接改用的批处理脚本
下面这段 Script-Fu 放在~/.config/GIMP/2.10/scripts/目录下(Windows 对应C:\Users\你的用户名\AppData\Roaming\GIMP\2.10\scripts\),重启 GIMP 后在"滤镜 → Script-Fu → 控制台"里可以调用。
(define (batch-flatten-watermark pattern blur-radius opacity) (let* ((files (cadr (file-glob pattern 1)))) (while (not (null? files)) (let* ((filename (car files)) (image (car (gimp-file-load RUN-NONINTERACTIVE filename filename))) (base (car (gimp-image-get-active-drawable image))) (blur (car (gimp-layer-copy base TRUE)))) ;; 统一转成 RGB,灰度图也转,为后续上色留空间 (gimp-image-convert-rgb image) ;; 插入模糊层作为背景估计 (gimp-image-insert-layer image blur 0 -1) (gimp-image-set-active-layer image blur) (plug-in-gauss RUN-NONINTERACTIVE image blur blur-radius blur-radius 0) ;; 除法模式压平底纹 (gimp-layer-set-mode blur LAYER-MODE-DIVIDE) (gimp-layer-set-opacity blur opacity) ;; 合并后收窄动态范围 (gimp-image-flatten image) (let* ((flat (car (gimp-image-get-active-drawable image)))) (gimp-levels flat HISTOGRAM-VALUE 0 250 1.0 0 255)) ;; 导出 (let* ((out (string-append filename ".fixed.jpg"))) (file-jpeg-save RUN-NONINTERACTIVE image (car (gimp-image-get-active-drawable image)) out out 0.95 0 1 1 "" 0 1 0 0)) (gimp-image-delete image)) (set! files (cdr files))))) (script-fu-register "batch-flatten-watermark" "批量压平扫描件底纹" "对指定通配符匹配的所有图片做除法归一化并导出" "某开发者" "2024" "2024" "*.jpg;*.png" SF-STRING "文件通配符" "/path/to/scans/*.jpg" SF-NUMBER "模糊半径" 25 SF-NUMBER "不透明度" 0.65)几个必须说明的点。
常量名随版本变。GIMP 2.10 用LAYER-MODE-DIVIDE,2.8 用DIVIDE-MODE。脚本报"未绑定变量"多半是这个问题,去"滤镜 → Script-Fu → 过程浏览器"里搜一下确认。
gimp-levels的参数顺序是:可绘制对象、直方图类型、输入黑场、输入白场、伽马、输出黑场、输出白场。上面那段把白场从 255 收到 250,其余不动,正好对应手工操作里的"收窄动态范围"。
JPEG 质量给 0.95 而不是 1.0。1.0 会关掉色度二次采样,文件体积翻倍但肉眼几乎无差别,归档场景没必要。
脚本不要碰"导出路径"以外的文件。我曾经手滑把通配符写成*.jpg加绝对路径,结果把整个目录的原始扫描件覆盖了。血的教训:导出文件名一定加后缀,且第一次运行时先在测试目录里跑。
| 脚本参数 | 作用 | 建议值 | 风险 |
|---|---|---|---|
| 模糊半径 | 背景估计的空间尺度 | 20-30 | 太小文字残留,太大压抑渐变 |
| 不透明度 | 除法结果的强度 | 0.6-0.8 | 1.0 会让图整体发白 |
| 白场收窄 | 留出上色余量 | 250 | 顶到 255 后续无法提亮 |
| JPEG 质量 | 输出保真度 | 0.92-0.95 | 1.0 体积膨胀无实际收益 |
6. 常见问题排查与踩坑记录
这部分的每一条都是我真金白银踩出来的,文档里不会写,但实际做的时候一定绕不开。
6.1 症状-原因-对策速查表
| 症状 | 最可能的原因 | 对症处理 |
|---|---|---|
| 压完底纹后文字发灰、发虚 | 不透明度太高,背景估计把文字暗部一起除掉了 | 把不透明度降到 50-60%,或改用"反相+线性减淡"思路 |
| 印章上色后边缘发白一圈 | 蒙版选区比真实印章大,羽化又叠加 | 选区先用"收缩 1-2 px"再羽化 1 px |
| 整体泛黄严重、像旧报纸 | 色彩化饱和度超过 20,或色相超过 60 度 | 饱和度退到 10 左右重新调 |
| 细笔画断裂、出现锯齿 | 色阶黑场压得太狠(输<10) | 黑场回到 15-20,保留边缘过渡灰 |
| 打印出来整体偏暗 | 屏幕亮度偏高,误判了中间调 | 打印预览校准,或直接按直方图峰值定位 |
| 保存后颜色变了 | 导出时色彩配置文件不匹配 | 导出对话框里勾选内嵌 sRGB 配置文件 |
| 局部上色的色块边缘很硬 | 用了"正常"模式而不是"颜色"模式 | 图层模式改成"颜色",保留底层明暗 |
| 脚本跑完文件全糊 | 模糊半径按像素给的,但图片是 600dpi | 半径按分辨率等比放大,600dpi 用 50 |
这张表里的前四条,几乎每个人第一次做都会撞上。我建议你把表存下来,出问题先对照,能省掉大量瞎调的时间。
6.2 几个只有实际做过才知道的细节
细节一:别在 JPEG 上反复存。JPEG 是有损压缩,每存一次就多一层块状伪影。整个流程里,原图只读不写,中间全部存 XCF,最后一次性导出。如果你中途为了方便存了三四次 JPEG,最后导出的成品放大看会有一圈一圈的方块,尤其在文字边缘,特别明显。
细节二:扫描件的"黑"不是真的黑。我一开始按常规思路把文字压到 RGB 全 0,结果打印出来笔画是断的——因为原图的文字本来就只有 30 左右的灰度,压到 0 等于把笔画边缘所有的过渡像素全部吃掉,细的地方直接消失。后来改成压到 15-20,保留边缘过渡,打印立刻正常。判断标准不是数值,是打印出来的实物。
细节三:纸纹是有价值的,别一味抹平。我一开始把底纹压得干干净净,纸张纯白得像数码生成的,反而显得假。后来把"背景估计"层的不透明度从 75% 降到 65%,故意留了一点点极淡的纹理起伏,观感立刻真实了。这里的分寸是:能看出是纸,但看不出是脏。
细节四:印章的红色不要用纯红。#FF0000在纸上是不可能的,真实印泥是偏暗的朱红,带一点橙或者一点紫。我用的#C0282D,明度大概 60%、饱和度 60%,打印出来接近真实印泥。用纯红打印,会显得特别"数字"。
细节五:局部上色前先做一次整体降噪。扫描件的暗部常有彩色噪点,你上色之后这些噪点会被放大成花花绿绿的斑点。处理方法是在合并前对背景层做一次"滤镜 → 增强 → 去斑"(半径 1-2),或者"滤镜 → 模糊 → 选择性高斯模糊"(只模糊低对比度区域)。这一步做完,整体观感能提升一个档次。
细节六:导出格式选 PNG 还是 JPG,看用途。归档留底用 PNG 无损,体积大概 3-8MB,无所谓。要发给别人、要打印店处理,用 JPG 质量 0.92,体积能压到 1MB 以内,兼容性最好。别用 GIF 或者 BMP,前者 256 色会毁掉渐变,后者体积大得离谱。
细节七:留一份"处理前"的对照图。我习惯在 XCF 里最底层保留原始图层,命名为RAW_LOCKED并锁定。这样任何时候都能一键开关对比,判断自己改得对不对。这个习惯救过我两次——有一次调了两个小时越调越怪,一对比才发现是旋转角度差了 0.3 度,从头就错了。
细节八:别追求"和原件一模一样"。这是最重要的一条。重建的目标是"合理",不是"还原"。你手上的信息本来就不完整,硬要往原件上凑,只会做出一个四不像。我最后的成品和原件对比,颜色肯定不一样,明暗层次也有出入,但拿给同事看,第一反应是"这是一张正常的彩色扫描件",这就够了。归档案卷要的是清晰、可读、可检索,不是像素级复刻。
整套流程我前后花了大概两个半小时,其中一半时间在修印章蒙版。第二次做同类文件,复制参数、跑脚本,四十分钟能出一张。如果你手上有一批这种老扫描件,我建议先拿一张最差的做试验,把参数吃透,剩下的就是批量执行。这个技能的复用率其实很高——合同扫描件、票据归档、老照片数字化,底纹压平和局部上色这两招是通用的,换个场景接着用就行。