介绍与使用
HoloCard 把一张照片做成可交互的分层闪卡:上传照片后,服务端自动把画面切成前、中、后景若干层,每层各配一种箔面,网页上转动卡片时箔面随角度变化。线上地址:https://holocard.longsizhuo.com。
箔面效果与交互手感移植自 pokemon-cards-css(Simon Goellner,GPL-3.0)。该项目中每张卡都需要作者手工准备一张遮罩图,标出箔面透出的区域;HoloCard 用分层算法自动生成这张遮罩,因此任意照片都可以做成闪卡。HoloCard 同样以 GPL-3.0 发布。
界面提供中文、英文、日文三种语言,在页头切换。
一张卡的组成
结构对应真实闪卡的印法:底材是箔,主体用不透明油墨覆盖所以哑光,背景不覆盖所以闪亮。
| 组成 | 作用范围 | 随视差移动 | 何时可见 |
|---|---|---|---|
| 景深层 | 各层自己的画面 | 是,各层幅度不同 | 始终 |
| 每层的箔面 | 只在该层的形状之内 | 是,跟随所在层 | 卡片倾斜时 |
| 整卡炫光 | 整张卡面 | 否 | 只在特定倾角浮现细微的五彩 |
| 整卡高光 | 整张卡面 | 否 | 跟随指针 |
层与深度
服务端估计照片的深度,按「远—近」把画面切成 2~4 层,层数随照片内容而定;有明确主体(人物、动物等)时,主体单独成为最近的一层。每层是一张与原图同尺寸、带透明通道的图片,从远到近叠放后与原图一致。被前景遮挡的部分已经补全,前景移开时露出的是后一层的延续。
视差
卡片倾斜时,各层按各自的视差系数做不同幅度的平移:近处的层向外移动,远处的层向内退,形成立体感。全部层按同一倍数略微放大,以免边缘露出空白。视差可以关闭,关闭后卡片是一张平面图。
箔面
每层的箔面只出现在该层的形状内,并随该层一起移动。可选四种:
| 箔面 | 界面名称 | 效果 |
|---|---|---|
none | 哑光(不上箔) | 不上箔 |
holo | 经典闪卡 holo | 斜向彩虹、细扫描线与竖向光栅 |
sunpillar | 日柱 sunpillar | 斜向日柱彩虹,带金属颗粒 |
rainbow | 彩虹闪粉 rainbow | 闪粉与多色渐变 |
默认分配:最远层(背景)为日柱,中间层为经典闪卡(强度 0.8),最近层(主体)为哑光。只有一层时该层为日柱。
整卡炫光与高光
整卡炫光铺满卡面、不参与视差,只在卡面转到能把光源反射进视线的角度时浮现,其余角度几乎不可见。整卡高光是跟随指针的镜面反光。画面中接近纯白的区域会自动减弱箔面、炫光和高光,以保留白色衣物、毛发等的纹理。
使用
上传与处理
点击页面上的上传按钮(悬停提示「上传照片」)选择图片,或把图片拖到该区域。
- 支持 JPEG、PNG、WebP、AVIF、HEIC,单张不超过 16MB。超过 15MB 的图片先在浏览器中缩小到最长边 4096 像素再上传,缩小时同时去除 EXIF(含定位信息)。
- 同一 IP 每 10 分钟最多提交 10 次。
- 处理在服务端完成,浏览器无需下载模型。进度条显示当前步骤(排队、识别主体、估计深度、切层与补洞等)和预计剩余时间。
- 只有在部署中没有分层服务时(例如纯静态的自托管部署),才会改在浏览器中处理,首次需要下载约 50MB 模型。浏览器中做出的卡不在服务端,不能分享或导出。
开卡包
上传后,卡带最右侧先出现一个卡包,处理完成时卡包亮起(界面提示「划开,或点一下」):
- 沿卡包顶部封口横向划过即可撕开,划过约六成后松手,封条整条扯下;
- 或点击卡包,卡包抖动后展开。
新卡从袋口升出,转一圈亮相。开包伴有音效,有卡包时卡带右下角出现「开包音效」按钮,可以关闭,选择记在本机。系统开启「减少动态效果」时不播放动画,直接显示卡片。
别人分享的卡在一台设备上首次打开时,同样先显示一个卡包;开过之后再打开直接显示卡片。
卡带切换
首页主舞台是一条卡带,列出本次访问做的卡,最新的在最右侧。用卡片两侧的「上一张」「下一张」按钮或键盘 ← → 切换。处理新卡期间可以切回之前的卡;新卡做好时,若停在别的卡上,「下一张」按钮上会出现一个小点。
卡带记录在当前标签页中,刷新后保留,关闭标签页后清空。做过的卡在「我的卡册」中一直可以找到。
调整效果
卡片旁的面板用于调整当前这张卡:
| 控件 | 作用 | 取值 |
|---|---|---|
| 各层一行:下拉框 | 这一层的箔面类型 | 见上方箔面表 |
| 各层一行:滑块(「这一层的箔面强度」) | 箔面强度;哑光层不可调 | 0~1 |
| 「立体视差」开关 | 开启或关闭视差 | 开 / 关 |
| 「景深与炫光」→「视差振幅」 | 视差幅度,占卡宽的比例 | 0~16%,默认 2% |
| 「景深与炫光」→「炫光强度」 | 整卡炫光强度,0 为关闭 | 0~1,默认 0.35 |
| 「景深与炫光」→「角度锐度」 | 炫光出现的倾角范围,越大越窄 | 10~400,默认 120 |
| 「景深与炫光」→「当前炫光」 | 只读,显示此刻炫光的实际亮度 | — |
拖动滑块或更换箔面时,卡片会自动转到炫光最亮的角度,片刻后回正,以便看清调整的效果。
卡的主人做出的调整停手约 1 秒后自动保存到服务端,分享页、分享预览图和导出的动图都按保存的配置呈现。在别人的卡上调整只影响本机当前的显示,不会保存。「立体视差」开关的选择另外记在本机,用于还没有保存过视差设置的卡。
分享
卡片做好后自动生成分享链接,显示在面板中,点「复制」即可。自动生成失败时,面板上保留「生成分享链接」按钮,可手动生成。
- 链接形如
https://holocard.longsizhuo.com/c/<id>;在英文、日文界面下生成的链接带?lang=en或?lang=ja,在聊天软件中显示的标题、描述和预览图使用分享人的语言。 - 只有卡的主人可以分享:持有这张卡删除口令的设备,或卡所在的登录账号。
- 卡的主人打开自己的分享链接时可以继续调整、分享和删除;其他人打开时可以转动、导出,调整不会保存。
- 分享后的保留期按访问量延长,见下方「保留规则」。
导出动图
面板上的导出按钮按设备给出能直接存入相册的格式,文件在服务端按卡片保存的配置生成:
| 设备 | 按钮 | 格式 | 保存方式 |
|---|---|---|---|
| iPhone / iPad | 「存为动图」 | GIF | 生成后按钮变为「保存到相册」,再点一次打开系统分享面板,选择「存储图像」。不支持分享文件的旧系统会下载到「文件」App |
| 安卓 | 「存为动态照片」 | 动态照片(JPEG 末尾附视频) | 直接下载 |
| 电脑 | 「下载动图」 | APNG(扩展名 .png) | 直接下载 |
导出不限于卡的主人,别人分享的卡也可以导出。微信、QQ 的内置浏览器不允许下载,需通过右上角「···」在系统浏览器中打开后再导出。
删除
卡的主人在面板上点「删除这张卡」并确认后,服务端上的层文件和预览图立即清除,已经分享出去的链接同时失效,操作不可恢复。
未登录时,删除权限依赖本机浏览器中保存的删除口令。清除浏览器数据后,这台设备将无法再删除或分享以前做的卡;登录后把卡放进账号可以避免这一问题。
陀螺仪
在手机上,卡片跟随手机的倾斜转动:左右倾斜约 16°、前后倾斜约 18° 时转到最大角度。iOS 需要授权,首次点击卡带区域时系统会弹出请求;拒绝后仍可用手指拨动卡片。
卡片的基准姿态会缓慢跟随手机当前的姿态,保持手机不动时,卡片在几秒内自动回正,仅在转动过程中产生效果。用手指操作时以手指为准。
卡册与登录
我的卡册
卡册以网格列出做过的卡,最新的在前,无需手动添加。卡册的入口在个人中心:点页头右上角的「登录」(登录后显示为头像和名称)打开个人中心,再点「打开卡册」。未开启登录的部署上,页头按钮直接是「我的卡册」。点击缩略图进入该卡的页面,在那里分享、导出或删除。已过期或已删除的卡显示「已过期」。
未登录时,卡册是本机记录:内容来自这台设备浏览器中保存的删除口令,只在这台设备上可见。
登录
HoloCard 支持使用 involutionhell 账号登录,登录是可选的,不登录时全部功能照常可用。登录入口在个人中心(页头右上角的「登录」按钮)和卡册顶部的「用 involutionhell 账号登录」。HoloCard 只获取账号的 id、名称和头像,不获取邮箱。
登录后:
- 卡册标题变为「我的在线卡册」,列出账号中的卡,以及这台设备上还没放进账号的卡;
- 登录状态下做的卡直接归入账号,在任何设备上登录后都可以查看、分享和删除;
- 账号中的卡不会过期。
认领本机的卡
登录后,若这台设备上有还没放进账号的卡,卡册顶部会显示「这台设备上有 N 张卡还没放进账号」以及这些卡的缩略图,默认全部勾选。取消不属于自己的卡(例如在公用电脑上),然后点「放进账号」。
认领后,这些卡归入账号、不再过期,这台设备上原有的删除口令作废,此后以账号作为卡的主人。已删除、已过期的卡不能认领。
个人中心
点页头右上角的按钮打开「个人中心」。页头上另有「文档」,进入本文档站,语言跟随页面当前语言。
未登录时,个人中心包含登录入口,以及「我的卡册」(这台设备上的卡片数量和「打开卡册」)。
登录后,页头按钮显示头像和名称,个人中心包含:
- 账号信息与「退出登录」;
- 「我的在线卡册」:账号中的卡片数量,「打开卡册」进入卡册;
- 「对外接口(API)」:「接口文档」链接、24 小时内的用量,以及账号下的 key。点「申请 API key」获取一个新 key,key 只显示一次;一个账号最多同时持有 10 个 key,共用同一份额度,忘记手上的 key 时直接再申请一个即可,不再使用的点「吊销」。接口用法见 API 文档,在网页中展示接口生成的卡见 播放器。
卡面遮罩
卡面遮罩是面向游戏卡的独立工具,地址为 /masks,首页不放入口:上传一张已经做好的平面卡图,得到卡边、边框、文字、主角、特效、背景六张互不重叠的箔面遮罩,并可预览不同组合的箔面效果。详见卡面遮罩。
保留规则
卡片文件保存在服务端,到期后删除。以下为线上站点的默认值:
| 卡片 | 保留期 | 计时起点 |
|---|---|---|
| 未分享的卡 | 7 天 | 生成时 |
| 已分享的卡 | 7 天起,按访问量延长,最长 112 天 | 最后一次访问 |
| 账号中的卡(登录时做的、认领的) | 不过期 | — |
| API 生成的卡 | 24 小时 | 提交时 |
已分享的卡按访问量分档:
| 累计访问次数 | 从最后一次访问起保留 |
|---|---|
| 0~1 | 7 天 |
| 2~3 | 14 天 |
| 4~7 | 28 天 |
| 8~15 | 56 天 |
| 16 及以上 | 112 天 |
- 访问指打开分享链接(
/c/<id>页面);同一 IP 对同一张卡一小时内只计一次。 - 分享操作本身按一次访问重新计时。
- 由于卡片做好后会自动分享,网页上做的卡通常处于已分享状态;只有自动分享失败且没有手动分享时才按未分享计算。
- 卡片删除后立即清除,不受上表约束。
- 自托管部署可以通过环境变量
HOLOCARD_TTL_MS修改基础保留期(默认 7 天)。