合并 master 并完整恢复多产物原图回填

恢复角色、图标和 UI 成功结果中的透明主结果与 provider 原图双产物回填

恢复图标和 UI 切片在 provider 原图右侧的排列,并保持透明主结果为 generatedLayerId 锚点

保留 OSS image_url、短时签名、缓冲释放、逐帧重签名及 object key 降级约束

保留尺寸一致不回读、尺寸漂移时短时回读原图回贴 Alpha 的所有权策略

同步权威文档、决策记录和已知陷阱,并验证画布定向测试、格式与编码检查
This commit is contained in:
2026-07-18 11:44:26 +00:00
5 changed files with 47 additions and 23 deletions
@@ -22,12 +22,12 @@
- 验证:覆盖 nanobanana2 / gpt-image-2 的比例与 K 档尺寸矩阵、VectorEngine 最终请求体、普通图片 / 角色 / 图标 / UI 占位,以及低分辨率去背景结果只贡献 alpha、不贡献被放大的 RGB。
- 关联:`src/components/image-editor/ImageCanvasGenerationModel.ts`、`server-rs/crates/api-server/src/editor_project.rs`、`server-rs/crates/platform-image/src/vector_engine/request.rs`。
## 多产物任务的中间原图是否入画布必须按类型区分
## 多产物任务的中间原图不能只落资源库
- 现象:角色形象正常成功后缺少可对照的纯色背景原图,或者图标 / UI 生成后画布多出一张与透明主图集近似的纯色背景图集。
- 原因:角色形象与图标 / UI 的画布交付需求不同,若把三类任务统一成“原图都入画布”或“原图都不入画布”,就会分别造成图集重复或角色原图缺失。
- 处理:provider 原图始终写入 OSS、项目资源和账号素材库。角色形象正常成功时同时落透明主结果与右侧 provider 原图,生成器 `generatedLayerId` 仍指向透明主结果;图标 spritesheet 和 UI 素材提取正常成功时不把 provider 原图放入画布,只放透明主图集及明确需要的拆分素材。仅当透明处理最终失败时,才用 provider 原图作为唯一主图完成占位。
- 验证:覆盖角色正常成功落两个图层且原图位于透明图右侧、`generatedLayerId` 指向透明图,图标 / UI 正常成功不落 provider 原图、无切片时只有透明主图集,以及透明处理失败仍由原图单独完成占位。
- 现象:角色形象、图标 spritesheet 或 UI 素材提取正常成功后,画布只有透明结果,用户无法直接对照和复用 provider 原图。
- 原因:后端虽然为追溯和后处理失败恢复持久化了 provider 原图,但完成画布只写入透明主结果和拆分素材,把“资源已保存”错误等同为“用户已拿到原图”。
- 处理:provider 原图始终写入 OSS、项目资源和账号素材库;三类任务正常成功时都同时落透明主结果与右侧 provider 原图,生成器 `generatedLayerId` 仍指向透明主结果,图标 / UI 拆分素材从原图右侧继续排列。仅当透明处理最终失败时,才用 provider 原图作为唯一主图完成占位。
- 验证:覆盖三类任务正常成功都落透明结果与原图、原图位于透明图右侧、`generatedLayerId` 指向透明图、图标 / UI 拆分素材位于原图右侧,以及透明处理失败仍由原图单独完成占位。
- 关联:`server-rs/crates/api-server/src/editor_project.rs`、`docs/technical/【后端架构】外部生成Worker化方案-2026-06-03.md`。
## phase 上报的业务拒绝与传输失败不能共用字符串错误