fix: per-item transform in batch export (correct placement across sizes)
QueuePanel reused one pixel TransformState for all non-fine-tuned items, mis-placing garments/prints of other sizes. Store the ratio-based template instead and recompute each item from its own garment/print size. - add core.composer.image_size() and resolve_transform() (pure, tested) - queue: set_template() replaces set_transform(); per-item resolve + size cache - template_panel: expose current_template(); main_window pushes it to the queue - tests: +4 covering fine-tune precedence, per-size recompute, empty inputs Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -820,6 +820,32 @@
|
||||
- [x] 点击未微调队列项,预览印花为选中模板要求的大小/位置
|
||||
- [x] 已微调项仍显示其自身参数,不被覆盖
|
||||
|
||||
### 17.15 修复:批量导出对未微调项复用单个像素变换
|
||||
|
||||
前置阅读:
|
||||
|
||||
- `docs/02-prd.md`(6.6 模板选择)
|
||||
- `docs/08-image-editor-design.md`(变换状态)
|
||||
|
||||
问题:
|
||||
|
||||
- `QueuePanel` 用单个像素级 `TransformState`(`_template_transform`,来自 `template_applied`,按「当时画布那张衣服/印花尺寸」算出)作为所有未微调项的回退变换。
|
||||
- `TransformState` 是「衣服原图像素坐标」,对尺寸不同的衣服/印花原样复用会错位、错尺寸(如 1000×1000 算出的 x=400/w=250 套到 2000×3000 上,印花跑到左上、尺寸只剩一半)。
|
||||
- 影响批量导出与「导出选中」中所有未微调项。
|
||||
|
||||
任务:
|
||||
|
||||
- [x] 队列改存模板对象(比例坐标 `Template`)而非单个像素变换:`set_template()` 取代 `set_transform()`
|
||||
- [x] 导出时按每项自身衣服/印花尺寸现算:抽纯函数 `core.composer.resolve_transform()`(已微调项用自身变换,否则 `template.to_transform_state(gw,gh,pw,ph)`)
|
||||
- [x] widget 仅负责读图尺寸(`core.composer.image_size()`,只读 header)+ 单次运行内缓存
|
||||
- [x] `main_window` 在 `template_changed`/`template_applied` 时把模板推给队列,并在启动时初始同步
|
||||
- [x] 新增 4 个纯函数单测覆盖:已微调优先、不同尺寸各自换算、空模板/空尺寸返回 None
|
||||
|
||||
验收:
|
||||
|
||||
- [x] 一个批次内含不同尺寸的衣服/印花时,未微调项各自按模板正确落位
|
||||
- [ ] GUI 实测:混合尺寸批量导出,结果图印花位置/大小均正确
|
||||
|
||||
## 18. 后续暂缓任务
|
||||
|
||||
以下任务第一阶段暂不做,后续需要时再新增设计文档:
|
||||
|
||||
Reference in New Issue
Block a user