卡面遮罩
卡面遮罩把一张已经做好的平面卡图拆成几张箔面遮罩,用于 pokemon-cards-css 等以遮罩控制箔面范围的渲染方式。与 HoloCard 的主功能不同,输入是带边框与文字的成品卡,而不是照片;输出是遮罩图,不做视差分层。
入口:holocard.longsizhuo.com/masks。这是面向游戏卡的独立工具,首页不放入口。
使用
- 点「选择卡图」,上传卡图。支持 JPEG、PNG、WebP、AVIF、HEIC,不超过 16 MB;长边超过 1400 像素的会先缩小。
- 处理约需一分钟,期间页面显示「正在处理」。
- 完成后,左侧为预览卡片,右侧勾选「哪里闪」并选择箔面类型,预览随之更新。
- 下方列出各张遮罩和分区总览,可单独下载;「下载当前组合的遮罩」下载按勾选区域合成的一张。
输出
共六张遮罩,互不重叠:每个像素上六张的取值加起来正好是 255。因此任意几张直接相加就是它们的并集,拼接处不留缝、不重复,主角边缘的半透明过渡也会保留。
每张遮罩与卡图同尺寸,为灰度加 alpha 的 PNG,两个通道取值相同:白色(不透明)表示该区域。CSS 的 mask-image 默认按 alpha 使用,按亮度使用(mask-mode: luminance)结果相同。
| 遮罩 | 内容 |
|---|---|
| 卡边 | 最外圈与卡边同色的一条(宝可梦的黄边、银边) |
| 边框 | 画框以外、卡边以内的卡面:名字栏、说明区、底栏。全图卡为内板以外的部分;既没有画框也没有内板时,为压在画上的底板(名字栏、类型栏、说明框) |
| 文字 | 检测到的文字,包括画框内、压在画上的文字 |
| 主角 | 画框内的主体;全图卡在内板内抠,都没有时在整张卡上抠 |
| 特效 | 紧贴主角、明亮且饱和的区域(火焰、光弹等),以及主角轮廓内侧一圈 |
| 背景 | 画框(或内板)内除主角、特效、文字以外的部分 |
重叠处按 文字 > 特效 > 主角 > 卡边 > 边框 的顺序归前者,背景为剩余部分。
另有一张分区总览 labels.png(RGB):每个像素按取值最大的遮罩上色,便于查看,也便于程序读取。
| 颜色 | RGB | 区域 |
|---|---|---|
| 灰 | 148, 163, 184 | 卡边 |
| 蓝 | 59, 130, 246 | 边框 |
| 橙 | 245, 158, 11 | 文字 |
| 红 | 239, 68, 68 | 主角 |
| 紫 | 168, 85, 247 | 特效 |
| 绿 | 34, 197, 94 | 背景 |
接口 GET /api/cardmask/<id> 在完成后还返回版式:window 为画框,panel 为全图卡的内板(均按卡图宽高归一化,没有时为 null);lines 为检测到的每行文字的位置与角色,角色为 name(名字栏左侧)、hp(名字栏右侧)、body(招式与效果说明)、footer(底栏、编号、版权)、art(画内的文字)。
组合方式
实体卡不同稀有度的箔面,大致对应这几张遮罩的不同组合。以宝可梦卡为例,与官方遮罩对照得出:
| 稀有度 | 箔面范围 |
|---|---|
| 普通闪卡(Rare Holo) | 背景;画中的火焰、光效也有箔面时加上特效 |
| 反闪(Reverse Holo) | 边框 + 文字(卡边没有箔面) |
| V / VMAX | 卡边 + 边框 + 背景;部分卡主角也有箔面,加上主角、特效 |
| VSTAR | 背景(只有内板有箔面);主角有箔面时加上主角、特效 |
| 秘密稀有(Secret Rare) | 卡边 + 边框 + 背景 + 特效 |
| 光辉(Radiant) | 卡边 + 边框 + 文字 + 主角 + 特效 |
同一稀有度的不同卡面也可能不同,组合以卡面设计为准。
识别方式与局限
游戏卡上各类元素的位置大致固定,识别时利用了这一点(版式先验):
- 画框与内板:不依赖模型。先找贯穿大半个卡宽的长直边,组成候选矩形,再按「边的完整程度」和「框内是否像插画」选出画框,前提是画框位于卡面上半部分,宝可梦、万智牌、游戏王均满足。左右贴着卡边、高度超过卡高一半的矩形不是画框,而是全图卡的外框线;此时改找内板:左右离卡边约 4%、上沿在名字栏下方、高约 77%~80% 的矩形。两者都没有时视为整张都是画,再找压在画上的底板(万智牌无边框卡的名字栏、类型栏、说明框,宝可梦的规则框):从每行文字向上下找最近的长横边,再在两条横边之间向左右找长竖边,四条边都找到、宽度超过卡宽 60%、内部比外面一圈平坦的算作底板,归入边框。文字直接压在画上的卡(宝可梦插画稀有卡)没有底板。纹理底的说明框(如羊皮纸)、压在很花的画上的半透明说明框可能找不到。
- 文字:PaddleOCR 的 PP-OCRv4 文字检测模型,只识别位置,不识别内容。检测到的文字按位置分角色:画框(内板)以上为名字栏,画框以下为说明,最底部为底栏;全图卡上半部分的文字视为画内文字。
- 主角:BiRefNet_lite 抠图。全图卡上,抠图模型常把下半部分的招式框、能量球当作主体,而实体卡的主角很少伸入说明区,因此主角从最上面一行说明文字处向下逐渐淡出。画面中物体很多时,仍可能把大部分画面当作主体。
- 卡边:从图片四边向内,取与四边颜色中位数相近、离边不远的连通区域。卡边颜色变化很大(如镭射银边)时可能取不全。
- 特效:按规则判断,不依赖模型。背景本身明亮且饱和(如整片火焰)时,会多收或少收。
在公开卡图上的评测结果见本地开发中的 cardmask-eval。
隐私与保留
上传的卡图与生成的遮罩不进数据库,不公开,地址为随机生成,24 小时后删除。处理在 HoloCard 的服务器上完成,不发送给第三方。