签名抠图(signature-matting)
把含人名的手写签字图片处理成透明背景 PNG,笔画可选地加黑。支持单张处理,也支持一次性处理整个文件夹里的所有签名。
核心两步:
1. 云端 AI 抠图去背景(内置 buddy-image-processing 的 matting,保留笔迹)
2. 本地可选加黑(阈值压暗 + 提对比度,保留浓淡层次)+ 裁剪透明边缘
前置依赖
- 内置技能
buddy-image-processing(提供云端matting能力)已可用。 - Python 3.7+,脚本自动
pip安装 Pillow(若缺失)。 - 运行需要云端临时 token,由主代理调用
connect_cloud_service获取后传入脚本。
主代理执行流程
- 取凭证:调用
connect_cloud_service,取回clientTempToken(约 15 分钟有效期,过期重新取;批量文件很多时若中途报 matting 失败,重连取新 token 再跑剩余)。 - 跑脚本(参数见下表),例如:
```bash
# 单文件
python "<SKILL_DIR>/scripts/process_signature.py" --input "<签名原图>" --token "<clientTempToken>" --darken yes
# 批量:处理整个文件夹,结果输出到指定目录
python "<SKILL_DIR>/scripts/process_signature.py" --input "<签名文件夹>" --batch --token "<clientTempToken>" --darken yes --output "<输出目录>"
``
3. **展示**:用present_files` 打开最终 PNG 给用户确认(批量时逐个或整体展示)。
> <SKILL_DIR> 即本技能目录(自动探测不到 buddy-image-processing 时,用 --skill-dir 指定其目录)。
参数说明
| 参数 | 必填 | 默认 | 说明 |
|---|---|---|---|
--input |
是 | - | 输入图片文件(单文件模式)或文件夹(--batch 批量模式) |
--batch |
否 | 关 | 批量开关。开启后 --input 必须是文件夹,遍历其中所有 jpg/jpeg/png/bmp |
--darken |
否 | yes |
yes=加黑(笔画更清晰);no=仅去背景并裁透明边 |
--output |
否 | 输入同目录/同名 | 单文件:文件路径或目录;批量:输出目录(默认与输入同目录) |
--token |
是 | - | connect_cloud_service 返回的 clientTempToken |
--skill-dir |
否 | 自动探测 | buddy-image-processing 技能目录(找不到时报错提示) |
输出命名:单文件默认 <原名>-透明.png;批量默认在输出目录生成 <原文件名>-透明.png(不影响原图)。
调用示例
示例 1 — 单张、加黑
python "C:\Users\zhang\.workbuddy\skills\signature-matting\scripts\process_signature.py" \
--input "C:\Users\zhang\Desktop\电子签名-刘亚轩.jpg" \
--token "ck_xxxx" --darken yes
# 产出:C:\Users\zhang\Desktop\电子签名-刘亚轩-透明.png
示例 2 — 整文件夹批量、加黑,输出到归档目录
python "C:\Users\zhang\.workbuddy\skills\signature-matting\scripts\process_signature.py" \
--input "C:\Users\zhang\Desktop\20260903-省级成果国家级预审会议\6-专家电子签" \
--batch --token "ck_xxxx" --darken yes \
--output "C:\Users\zhang\Desktop\20260903-省级成果国家级预审会议\6-专家电子签\透明版"
# 产出:透明版\电子签名-韩晓增-透明.png、电子签名-虞轶俊-透明.png ...
示例 3 — 批量但仅去背景(原图笔画已浓黑)
python "C:\Users\zhang\.workbuddy\skills\signature-matting\scripts\process_signature.py" \
--input "D:\签名原图" --batch --token "ck_xxxx" --darken no --output "D:\签名透明"
实现要点(脚本内)
- 抠图:调用 buddy-image-processing
image-edit --operation matting,prompt 固定为「提取前景手写签名笔画,保留原始书写风格,输出透明背景PNG」。 - 加黑
darken_strokes():在笔画(不透明)区域按亮度阈值threshold=110压暗drop=80,并提对比度(1.6→1.15)。保留浓淡层次,避免把飞白/浅笔触糊成纯黑块。 - 裁剪
trim_transparent():去掉四周全透明边缘,方便直接贴进文档。 - 批量健壮性:单张失败不影响整体,结束打印
成功/失败/共汇总;中间抠图产物处理完即删除,不堆积。 - 不修改原始图片,只生成新的透明背景 PNG。
注意
- 低分辨率原图(如小尺寸 BMP)抠图后边缘可能略见锯齿,建议尽量用高清原图。
- 若结果笔画断裂/缺失,通常是原图拍摄质量导致,可换更清晰原图重跑。
--darken no适合原图笔画已经浓黑的情形,避免不必要地加重。
关于本技能
- 创作者:浅见
- 版本:1.0.0
- 分享方式:将整个技能目录打包为 zip 分发,对方解压到
~/.workbuddy/skills/signature-matting/即可使用;或提交至 WorkBuddy 推荐市场(BuiltinMarket)经审核后公开发布。