matte-cut
自 v0.1.0
纯色底截图 → 透明图标
把纯色背景截图里等距排列的图标、徽章、卡片,批量抠成带透明通道的 PNG ——
自动识别网格、统一画布、按图上的文字命名。1017 × 12738 的长截图,一条命令出 93 张。
起因:微信读书 93 枚勋章,一张超长截图里 3 列 31 行。手动抠到手废,而且深色款按颜色一刀切会抠出洞。
什么时候用
- 成就墙、徽章墙、图标墙、奖杯网格这类纯色底长截图
- 要能直接排版的透明 PNG,不是抠完还剩一圈灰底的 jpg
- 文件名要能认出是哪个 —— 按截图里的文字自动命名
为什么不像「选个色再删掉」那么简单
- 背景从画面边缘往里灌,不按颜色阈值一刀切 —— 被描边围住的深色区才不会被咬出洞
- 边缘做颜色解混,把混进去的背景色减掉,贴白底不挂一圈灰蓝
- 张数用
--expect 卡死,少一张直接非零退出
skills/matte-cut
./bin/pickit probe fixtures/weread/badge.png --clusters-dir outputs/_clusters
./bin/pickit cut fixtures/weread/badge.png -o outputs/badges \
--labels-map fixtures/weread/labels.json --expect 93
不适用:照片 / 渐变 / 复杂场景背景(前提就不是纯色)、元素互相重叠粘连、需要放大超分。
分辨率是硬天花板 —— 原图一个图标 240px,抠出来就是 240px,别指望它变清晰。
remove-watermark
自 v0.2.0
只改水印区,框外 0 像素
去掉图片局部的浅色 / 深色文字水印。命令行自己打印「框外改动 N px」,
非 0 直接失败退出 —— "其他都不要改"不是承诺,是机器检查。
起因:2026-07 一张 899 × 1280 证件照,右下角压着浅灰的「豆包AI生成」。
当时的代码嵌在文档里、参数写死;现在它是一条有验收判据的命令。
三条路,按图的脾气选
- 阈值法 —— 水印和背景灰度分得开时,
probe 定阈值 → remove 修补
- 手绘 mask —— 阈值法判死时,画一张同尺寸黑白图直接指定要擦哪里
- AI 擦除 + 回贴 —— 低对比水印压在纹理上时,只把模型改过的那块贴回来,区域外仍取原图
为什么值得用
- 先判能不能做:
probe 判死就直说,并给替代路径,不让你反复调参碰运气
- 零新依赖:numpy + Pillow 就能跑;装了 OpenCV 自动切到 inpaint 拿更好的纹理
- 可量化验收:框外逐像素相等,mask 内与干净底图 MAE 下降 ≥50%
skills/remove-watermark
# 先侦察:这张图能不能用阈值法?
./bin/remove-watermark probe 待处理.jpg --preview-dir outputs/_probes
# 能用就一条命令擦掉,ROI 是水印所在的矩形
./bin/remove-watermark remove 待处理.jpg -o outputs/clean.png --roi 0.72,0.87
不适用:铺满全图的多处重复水印(得分多次跑)、要求输出文件与源 JPEG 二进制完全一致
—— 这做不到,请输出 PNG(无损)。