逻辑流程
上传资源
text
客户端 multipart 上传
→ API 检查请求大小并流式转发
→ Resource Service 写入 tmpfs
→ 校验 MIME、图片格式、尺寸和像素数
→ 创建 resourceToken 与固定 expiresAt
→ API 原样返回资源元数据API 不保存上传文件。上传中断或校验失败时,Resource Service 删除未注册文件。
实时预览
text
客户端创建 streamToken
→ 浏览器以固定 URL 订阅 multipart 流
→ 客户端提交完整预览任务
→ API 校验所有源资源、图层资源和活动流
→ API 为每个源资源并行调用 Image Worker
→ Image Worker 按 token 读取源图和图片图层
→ 全部 WebP 帧成功返回
→ API 以同一 revision 原子发布到全部流新请求会取消与它操作相同源资源的旧请求。旧批次不能覆盖较新的 revision。任一资源或 Worker 调用失败时,本批次不会发布部分帧。
最终渲染
text
客户端提交完整任务
→ API 预校验资源与模型
→ Resource Service 原子把源资源切换为 FINALIZING
→ API 限制并发并调用 Image Worker
→ 结果写入请求级 tmpfs
→ 全部成功后创建 manifest.json 和 ZIP
→ ZIP 完整交付
→ Resource Service consume 源资源
→ API 关闭关联预览流如果渲染、ZIP 输出或客户端连接失败,API 删除请求级文件并将仍存在的源资源回滚到 READY。
图层渲染顺序
- 按
zIndex从小到大排序。 zIndex相同则保留请求数组中的原顺序。- 图片图层解码后按
size缩放。 - 文字图层使用内置字体生成透明图层。
- 阴影、平铺、旋转和透明度作为图层整体变换应用。
- 合成全部图层后按
output编码。
预览固定输出 WebP、质量 80;最终通道才使用调用方的格式和质量。