AstroBox 壁纸生成器

系统概览与核心约束

理解单一壁纸源、JSON 驱动图层和统一渲染模型。

产品模型

壁纸生成器是一个由资源开发者控制结构、由最终用户调整有限参数的合成器,不是开放式图片或图层编辑器。

开发者通过远程 JSON 定义:

  • 输出画布和有效表盘区域;
  • 设备模板与匹配别名;
  • 图层数量、类型和从底到顶的顺序;
  • 固定素材、蒙版、混合模式和效果;
  • 用户可以调整的属性及其范围。

最终用户只能:

  • 导入一张壁纸图片;
  • 拖动、缩放和旋转这张图片;
  • 调整 JSON 明确开放的图层参数;
  • 导出 PNG;
  • 在满足设备条件时应用到当前表盘。

单一壁纸源

编辑器运行时只有一个用户图片源。配置可以声明任意数量的 wallpaper 图层,每个图层都是同一图片的一个合成副本。

所有 wallpaper 图层共享:

  • xy 位移;
  • 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 渲染逻辑:

  1. 编辑器实时预览;
  2. PNG 文件导出;
  3. 应用到表盘前生成的 PNG。

这保证效果顺序、蒙版、混合模式、换色和取景在三个输出路径中一致。

运行时数据流

资源 manifest
  └─ ext.wallpaperGenerator.configUrl
       └─ 安装任务保存「设备 + 表盘 ID → 配置 URL」关联
            └─ 设备页 / 设备卡片 / 表盘列表显示入口
                 └─ 加载并校验远程 JSON
                      ├─ 解析模板继承与旧格式兼容
                      ├─ 匹配当前设备模板
                      ├─ 加载素材、蒙版与字体
                      └─ 编辑 → 统一渲染 → 导出或应用

关键确定性约束

  • 图层严格按 JSON 数组顺序合成。
  • 蒙版只裁切所属离屏图层,不会裁切主画布上已经绘制的内容。
  • 背景模糊读取当前图层下方已经合成的主画布内容。
  • 玻璃层之前自动插入隐藏模糊形状层,玻璃本身不做 blur 混合(Pane 模式)。
  • 旋转后动态提高实际最小缩放,避免有效区域露底。
  • 平移边界在旋转后的图片局部坐标中计算,并同时满足所有壁纸副本各自的附加旋转。
  • 对设备应用时必须选择与当前设备精确匹配的模板。

下一步可阅读接入与使用流程或直接查阅配置完整参考

大纲