AstroBox 壁纸生成器
系统概览与核心约束
理解单一壁纸源、JSON 驱动图层和统一渲染模型。
产品模型
壁纸生成器是一个由资源开发者控制结构、由最终用户调整有限参数的合成器,不是开放式图片或图层编辑器。
开发者通过远程 JSON 定义:
- 输出画布和有效表盘区域;
- 设备模板与匹配别名;
- 图层数量、类型和从底到顶的顺序;
- 固定素材、蒙版、混合模式和效果;
- 用户可以调整的属性及其范围。
最终用户只能:
- 导入一张壁纸图片;
- 拖动、缩放和旋转这张图片;
- 调整 JSON 明确开放的图层参数;
- 导出 PNG;
- 在满足设备条件时应用到当前表盘。
单一壁纸源
编辑器运行时只有一个用户图片源。配置可以声明任意数量的 wallpaper 图层,每个图层都是同一图片的一个合成副本。
所有 wallpaper 图层共享:
x、y位移;scale缩放;rotation旋转。
各副本独立拥有:
- 蒙版;
- 自身模糊;
- 背景模糊;
- 透明度;
- 混合模式。
因此,常见的“模糊底图 + 局部清晰图”应声明两个 wallpaper 图层,而不是启用某个内置清晰区域功能。JSON 未声明的副本不会被自动创建。
五种图层
| 类型 | 数据来源 | 当前用途 |
|---|---|---|
wallpaper | 用户导入的唯一图片 | 背景、局部清晰副本、带蒙版副本 |
asset | 开发者提供的固定图片 | 玻璃、边框、纹理、装饰、可换色素材 |
tint | 纯色填充 | 变亮、变暗或颜色覆盖 |
text | 开发者提供的可变字体与用户可编辑文本 | 表盘文字、日期占位、标题等 |
glass | 程序化生成(软件渲染器) | Apple 风格液态玻璃、几何磨砂、折射与高光 |
旧配置中的 overlay 会兼容为 tint。新配置建议只写 tint。
text 图层主路径使用 Typr.js 解析 TTF/OTF/TTC/WOFF,配合可变字体 fvar/gvar 轴插值在 Canvas 上绘制 outline;缺字或无法解析的字体格式回退到 FontFace + fillText。
glass 图层不读取远程素材,全部由渲染器根据几何与材质参数生成。渲染管线会自动在玻璃层之前插入一个隐藏的模糊形状层。
JSON 是结构来源
Version 1 配置不会自动添加玻璃、边框、tint、壁纸副本或其他装饰。layers 可以为空;如果为空,输出只包含 canvas.background。
编辑器不会提供以下功能:
- 添加图层;
- 删除或复制图层;
- 调整图层顺序;
- 替换开发者固定素材或蒙版;
- 给不同壁纸图层选择不同用户图片。
统一渲染结果
以下三个路径调用同一个 drawWallpaper 渲染逻辑:
- 编辑器实时预览;
- PNG 文件导出;
- 应用到表盘前生成的 PNG。
这保证效果顺序、蒙版、混合模式、换色和取景在三个输出路径中一致。
运行时数据流
资源 manifest
└─ ext.wallpaperGenerator.configUrl
└─ 安装任务保存「设备 + 表盘 ID → 配置 URL」关联
└─ 设备页 / 设备卡片 / 表盘列表显示入口
└─ 加载并校验远程 JSON
├─ 解析模板继承与旧格式兼容
├─ 匹配当前设备模板
├─ 加载素材、蒙版与字体
└─ 编辑 → 统一渲染 → 导出或应用