签名去背景

把手机拍的照片或扫描的签名纸变成透明PNG上干净的黑色笔迹,纸张、阴影和发黄的色偏统统消失。

这个签名去背景工具做了什么

本页面把签好字的纸张照片或扫描件中的笔画提取出来,其余部分全部变透明。它不运行通用去背景工具所使用的那个AI主体分割模型,这是刻意的设计决定,而不是缺功能。让一个显著目标模型去说出“一张签好字的纸的照片”的主体是什么,它的答案是:那张纸。它会把整张纸干净地从桌面上抠下来交还给您,而签名依然坐在不透明的白底上。把墨迹和纸张分开完全是另一种测量,所以本页面跑的是另一套算法。它的工作方式和文档扫描仪一样。首先,它通过对每个像素周围一个大方窗内的亮度求平均,建立一张“纸有多亮”的分布图——窗口大小约为短边的十六分之一,通过积分图计算,因此开销不随窗口增大而增加。笔画很细,在任何这样的窗口中只贡献百分之几,这使得那张图本身就是对纸张的良好估计,连同它的阴影梯度、台灯的暖色偏和旧纸的发黄一并纳入。随后,每个像素与它自己所处位置的纸张值比较,而不是与某个固定亮度比较:低于周围光照的阈值比例的成为墨迹,其余变透明。紧贴阈值下方的一条柔和带让每一笔外侧的抗锯齿部分保持半透明,正是它让结果不至于看起来像一张传真。墨迹默认被压成接近纯黑,也可以为蓝色笔保留扫描到的颜色。局限直接来自这套方法:任何确实比周围纸张更暗的东西都算墨迹,所以印刷文字、横格线、方格、订书钉的阴影和一道硬折痕,都会连同签名一起留下来。比纸面只暗一点点的铅笔签名可能要调高阈值才能被认出来,而调高的同时也会开始放进纸张颗粒。另外,由于光照分布图假设笔画相对于窗口是细的,一个占满大半画面的粗马克笔签名会把自己的内部抹掉一部分。输出永远是PNG,文件绝不离开您的浏览器。

为什么签名需要一个专门的工具

几乎没有人第一遍就用数字方式签字。正常的流程是:合同、租约、税表或者学校的家长同意书以PDF发过来,有人把签名栏打印出来,或者在一张白纸上签个名,然后因为家里没有扫描仪,就用手机拍了下来。拍回来的是一块纸:靠窗那侧亮,角落发灰,被顶灯照得略偏暖,还带着持机的手投下的一道淡影。把这块纸直接丢进文档,会在页面上留下一片明显的浅色补丁,而它读起来就是它本来的样子。文档真正需要的只是笔画,别的什么都不要,这样签名周围的正文和横线才能透出来,就像当初直接签在打印件上一样。这也是通用去背景工具不适合这件事的原因:它去掉的是纸张背后的东西,而不是墨迹背后的东西。相对阈值之所以重要,出于同样实际的理由。单一固定亮度的分界线可以为某一张照片调好,然后在两分钟后换个角度拍的下一张上失效,因为第二张照片阴影角落里的纸,比第一张明亮角落里的墨还要暗。把每个像素与它自己的邻域比较,让这个设置可以迁移,也就是说您可以签五份表格、在同一盏乱七八糟的灯下把五张全拍了,然后一次跑完,不用重新调参。一切都在浏览器中完成,这一点在这里比在多数工具上更要紧:签名是极少数几种图片之一,把副本上传到别人的服务器是实打实的风险,而不是理论上的风险。

按局部纸张亮度作比较,不均匀的灯光和阴影都干扰不了它
发黄、偏暖或不是纯白的纸也能直接处理,无需先做色彩校正
笔画默认压成接近纯黑,也可按需保留原本的笔色
透明PNG叠在合同上不会留下一块可见的纸片

如何得到干净的签名抠图

结果取决于纸张怎么拍,比取决于参数怎么调要多得多,所以前两步最关键。

1

用深色笔在一张无横线的白纸上签名,正上方平拍,让签名占满大半画面——离得太远,每一笔上的像素太少,阈值就切不干净

2

上传照片或扫描件;不会发送到任何地方,文件在本地读取

3

点击“提取签名”,然后分别在白色和深色背景板上检查结果——浅色光晕只有在深色底上才看得出来

4

笔画断裂就调高墨迹阈值,纸张颗粒露出来就调低,然后下载透明PNG

常见问题

因为AI模型找的是主体,而在一张签好字的纸的照片里,主体就是那张纸。跑一遍的结果是一张被干净抠出来的纸,签名仍然待在不透明的白底上,这和您需要的恰好相反。本页面改为测量每个像素周围纸张的亮度,只保留明显比它更暗的部分。如果您那张纸恰好是拍在带花纹的桌面上,或者是举在房间里拍的,可以打开可选的纸张分离步骤,它会先跑AI模型把场景去掉,再对纸张应用墨迹阈值。
影响不大,而这正是本页面主要为之设计的情况。单一固定亮度分界线搞不定它:在强光照片里,阴影角落的纸可能比受光角落的墨还暗,所以没有任何一个数字能把两者分开。这里的每个像素都是与它自己周围一个大窗口的平均亮度比较,因此阴影角落是拿阴影里的纸来评判的。极硬的光线、且有一道硬阴影边缘正好横穿签名的情况仍然值得避开,但普通台灯造成的渐变根本不需要任何调整。
这在这套方法下是预料之中且无法避免的。工具并不知道什么叫签名;它保留一切比周围纸张更暗的东西,而印刷文字、蓝色横线、方格、订书钉阴影或一道硬折痕都符合条件。解决办法在拍摄环节:签在一张空白无横线的纸上,或者在上传前把照片裁到只剩签名,让画面里没有别的东西。横格纸尤其值得避开,因为那些线的深浅通常和一笔淡墨很接近,任何阈值设置都分不开它们。
铅笔的深浅比墨水更接近纸面亮度,所以需要调高墨迹阈值——试着往上推,直到笔画填实。代价是纸张颗粒会同时开始被认出来,因为颗粒也比周围略暗。如果您手上只有铅笔签名,请尽可能用最高分辨率、在均匀光线下拍摄,这两点都能提高石墨与纸张之间的对比。深色圆珠笔或勾线笔的结果永远比铅笔干净。
凡是之后会被缩小的(也就是大多数用途),设在20左右。这样每一笔外侧会保留一条半透明带,签名缩到签名栏那么小的时候,看起来仍然像钢笔字而不是一个带锯齿的形状。只有当您确实需要严格的两级图像时才降到0,例如要把这个PNG喂给某个把任何半透明都当作不透明的系统。超过40左右,这条带子会开始把真正的纸张也拉进来,笔画就显得糊了。
可以,打开“保留原本的笔色”即可。它默认关闭,是因为手机拍到的黑色墨水很少真的是黑的:相机会以纸张为准做白平衡,结果返回一种发灰泛褐的颜色,放到白色文档上就显得褪色。压成接近纯黑在常见情况下能修好这个问题。对于蓝色、红色或任何有意为之的彩色墨水,保留扫描到的颜色才是正确选择,不过您得到的是相机记录下来的颜色,而不是墨水真正的颜色。
哪里都不去。图片在页面内用浏览器画布完成解码、阈值处理和重新编码,没有任何副本被发往服务器。唯一的例外是可选的纸张分离步骤,它会在首次使用时把一个AI模型文件下载到您的设备,之后同样在本地运行;即便如此,图片本身也不会被传输。这一点对签名尤其值得说明白,因为签名是极少数几种图片之一,服务端多出一份副本是真实的问题,而不是假想的问题。
三者最后都给出一张透明PNG,但解决的问题不同。去除背景和透明背景都运行AI主体分割,面向的是有主体的照片——一个人、一件商品、一个物体。本页面默认不做任何分割,面向的是平面文档,您想留下的是浅色表面上细而深的痕迹。如果您想用鼠标或手指画一个签名,而不是把纸上的签名拍下来,那么签名手写页面才是更合适的起点。

更多图片工具

探索其他强大的图片编辑工具