Publish reference layouts as API-authored text and image notes
wiki CI and deployment / verify-and-deploy (push) Successful in 16m28s
wiki CI and deployment / verify-and-deploy (push) Successful in 16m28s
This commit is contained in:
+15
-28
@@ -1,39 +1,26 @@
|
||||
# 27 张原图对应排版
|
||||
# 原图排版:通过 API 发布普通 post
|
||||
|
||||
本组发布 27 张原图一一对应的设计 post,加 1 篇 Router。替换此前的 12 套概括构图;原 Router ID 保持稳定,旧 12 篇 post ID 跳转 Router,不擅自映射到一张近似设计。
|
||||
本组内容是 27 张设计 post + 1 篇 Router,保留原有 `/explore/<id>` 地址。素材、封面、构件清单和 HTML/React/Next.js 示例均为 API 上传的数据,不再注册为 Wiki 的代码内容。
|
||||
|
||||
## 原图与编号
|
||||
## 通用 API 工作流
|
||||
|
||||
用户提供的 736×980 拼图中,排除左侧“高级感排版”说明栏;从上到下、每行从左到右编号 ref-01…ref-27。前 3 行各 5 张,后 2 行各 6 张,左下两张计入。`public/layout-reference/numbered-source.png` 给出准确位置;`index.json` 为机器入口。
|
||||
1. `POST /api/upload`,multipart `assetOnly=true`,独立存储图像,不创建素材包。
|
||||
2. `POST /api/posts`,传入 `publicId`(可选的 24 位稳定 ID)、图片关联、正文、标签与封面,创建普通数据库 post。
|
||||
3. 后续 `GET /api/notes/{id}` 获取 revision,再 `PUT` 更新文字、媒体关联及 `coverAssetId`。普通 UUID 与稳定 publicId 都可读取和编辑。
|
||||
4. 图片通过 `/api/media/{id}`,正文通过原 post 的 `?agent_mode=True` 读取。
|
||||
|
||||
## 识别流程
|
||||
publicId 是通用迁移能力,不包含任何排版 ID 特判。数据库 post 可以接管同 ID 的代码条目,内容流按稳定 ID 去重。媒体和封面参与 revision,防止并发修改覆盖。替换素材关联只改引用,不删除原二进制或其他 post 的引用。
|
||||
|
||||
`segment-layout-reference.ts` 从外沿采样灰底,以 RGB 最大通道差 >19 建前景 mask,四邻域连通域按宽高范围筛选,自动检测 27 张。按 y 聚行、按 x 排序;没有手写外裁片表。
|
||||
## 本地创作数据与封面
|
||||
|
||||
`recognize-layout-text.swift` 使用 macOS Vision 本地 OCR,证据保存在 `reference/ocr-evidence.json`。逐张人工复核的文字、图位、装饰区域记录在 `annotations.json`。图位依据局部颜色种子建立掩膜;文字按亮暗与背景颜色分离,保留未知微字,不把 OCR 候选当作确认内容。
|
||||
`content/layout-reference/` 是 Wiki 应用之外的本地创作输入;不会被应用编译或挂载到 public。27 张原图、217 个文字/图位/装饰构件及识别证据保留在这里。`scripts/publish-layout-reference.mjs` 通过上述通用 API 上传资料,使用检查点保证可继续发布。
|
||||
|
||||
`group-text.ts` 将与既有文字块在基线、间距和字高上相连的残余字形合并。ref-01 的末尾字符保持在 T01,不能再产生 T03;ref-21 的 03 日期与旋转英文保持独立。
|
||||
新封面由 27 张实际裁片组成,使用 ref-01…ref-27 标签,并标出文字 113、图位 51、装饰 53。封面经媒体 API 上传并设置为 Router 的普通 coverAssetId。
|
||||
|
||||
T=文字,I=图片占位/色块,D=装饰,背景另存。每个构件有类型、角色、局部 box、原字形资产;文字可读则有 text,未知则为 null。27 张的 source SHA 与裁片绝对坐标持久保存。不同设计使用完整键,例如 ref-01/T01,运行时拒绝跨设计与跨类型替换。
|
||||
旧 `/layout-reference/...` 检查器、HTML 演示、JSON 静态文件及 ZIP 资源已从站点移除。构件表与清单直接写在 post 正文中;代码是可复制文本,不在 Wiki 内执行。原有 12 类近似方案的代码重定向特判也移除。
|
||||
|
||||
## 输出和使用
|
||||
## 验证
|
||||
|
||||
每张 `public/layout-reference/ref-NN/` 包含原裁片、标注图、三类掩膜图、分离构件 PNG、图位替换 mask、文字下的近似填补层、背景、重组 PNG、构件 JSON 与交互检查器。`ReferenceLayout.tsx` 默认使用原始分类资产重组;替换文字时改为 DOM,替换图位时使用该构件的遮罩,坐标保持对应。原字形模式为像素保真;替换模式并非像素保真,不声称恢复了原字体。
|
||||
本地执行类型检查和单元测试。Docker 集成测试验证独立上传不创建 post、stable publicId 接管与去重、正文及 JSON/TSX 的纯文本可读性、封面更新及并发冲突、媒体引用替换、重复 ID 拒绝,以及旧自定义目录返回 404。
|
||||
|
||||
`documents.ts` 为每张生成一篇独立教学 post:原图位置、构件表、文字方向、制作步骤、HTML、React、Next.js 和验收规则。Router 提供完整 27 项索引、识别方法、类型定义和严格调用协议。`package-reference-layouts.ts` 将 28 篇 Markdown、React/Next.js 代码和资产打包为 ZIP。
|
||||
|
||||
原图只有低分辨率拼图,无法恢复细字或确定字体。保留原字形不等于 OCR 全部正确;自动像素比较只验证重组一致,语义标注仍需人工查看。参考中灰绿区域为占位/色块,无可辨认真实照片。网页长文另提供正常可读正文。
|
||||
|
||||
## 重建与验证
|
||||
|
||||
从 apps/wiki 依次执行:
|
||||
|
||||
```
|
||||
node --import tsx scripts/segment-layout-reference.ts
|
||||
node --import tsx scripts/build-reference-layout-demos.ts
|
||||
node --import tsx scripts/package-reference-layouts.ts
|
||||
```
|
||||
|
||||
可选重新运行 Vision OCR:先将每张裁片等比放大,再运行 Swift 脚本,输出新证据,人工复核后更新 annotations;不可直接覆盖已核对语义。
|
||||
|
||||
`tests/layout-reference.test.tsx` 校验 27 个 ID 与行列、源 SHA、类型与资产归属、全部独立图层的真实合成像素、同词合并、日期独立、跨版面替换拒绝、React 渲染、三类代码示例与旧 post 跳转。生产构建和集成检查通过后,在指定服务器验收;不启动本地页面预览。
|
||||
部署成功后运行 API 发布客户端,核对 28 个标准 post、媒体文件、Router 封面、纯文本入口和正文中的全部链接。图像识别与构件合成属于本地创作校验,不作为 Wiki 的页面实现。
|
||||
|
||||
Reference in New Issue
Block a user