Communitygithub.com

shuangying0001-beep/svg-to-canvas-replica

SVG 图纸零误差转 Canvas(A4 印刷级):A4 SVG 设计稿/工程图坐标文字样式零误差复刻到 Canvas,误差<0.001px。适合印刷打样、设计稿还原、报表导出。

What is svg-to-canvas-replica?

svg-to-canvas-replica is a Claude Code agent skill that sVG 图纸零误差转 Canvas(A4 印刷级):A4 SVG 设计稿/工程图坐标文字样式零误差复刻到 Canvas,误差<0.001px。适合印刷打样、设计稿还原、报表导出。.

Works with~Claude Code~Codex CLI~Cursor
npx skills add shuangying0001-beep/svg-to-canvas-replica

Ask in your favorite AI

Open a new chat with this agent skill pre-loaded.

Documentation

SVG 转 Canvas 精确复刻管线

教备神器 · 工具模块。纯前端 Canvas 2D,零依赖。

这是什么(给人看)

你手上有现成的纸质模板 SVG(比如作业纸、练字纸、表格),想把它变成能在小程序/网页里自由改字、缩放、导出 PDF 的画面?本技能把 SVG 的每一个坐标、线条、文字、图片零误差搬到 Canvas 上——不是截图,是矢量的、可再编辑的。学校版/机构版模板还能一键切换。复刻任何纸质模板都通用。

  • 已附 selftest.js:用桩 ctx 验证"坐标真的被换算对",PASS 才算靠谱。

何时使用

  • "把这个 SVG 模板复刻成 Canvas" / "把 svg 画到 canvas 上"
  • 需要精准还原某个纸质模板(坐标系、线型、字号一致)
  • 模板有学校版/机构版两种样式要切换

坐标系换算(AI 必读)

坐标系尺寸关系
SVG viewBox21000 × 297001 单位 = 0.01mm
物理210 × 297 mmA4
Canvas px1240 × 1754150dpi
var SVG_TO_PX = 0.0590476;   // SVG 单位 → Canvas px(日常用这项)
// 元素坐标保持 SVG 单位解析,渲染时统一 * SVG_TO_PX

数据提取流程

  1. 读 SVG 文本 → 正则 <style> 动态解析 class → {stroke,strokeWidth,dashArray} / fill / {fontSize,fontFamily,fontWeight}
  2. 解析 <rect> <line> <polygon> <text> <image>,坐标保持 SVG 单位(不转换)
  3. 学校版机构版切换:行数不同(rows / rowsInst),核心绘制逻辑共享
  4. 渲染时 renderElements(ctx, elements) 把每个坐标 * SVG_TO_PX

核心函数签名(AI 直接调用)

// 解析 SVG 文本 → { source, totalElements, elements:[{type,x,y,w,h,stroke,fill,classes,...}] }
SvgToElements.parseSVG(svgText, sourceName, imgBase)

// 复刻渲染:自动 *SVG_TO_PX;image 需调用方提供 drawImage 加载逻辑
Replica.renderElements(ctx, elements, { scale?, drawImage? })

// 页码元素识别:classes 含 'footer-text' 且 text 为纯数字 → 返回该元素(供 drawAll 替换为页码)
Replica.detectPageNo(elements)   // -> element | null

// 模板配置 JSON 结构(源自 SVG 实测)
// { name, grid:{ cellW, cellH, cols, rows, rowsInst, startX, startY },
//   features:{ errorRow, pinyin, correctionCol },
//   branding:{ logo:{x,y,w,h}, qr:{x,y,w,h}, slogan } }

反例(避免)

  • ❌ 手算坐标(易错):一律 * SVG_TO_PX,零人工推算。
  • ❌ 复刻后丢失 class 样式:<style> 必须动态解析,不能硬编码颜色。
  • ❌ 机构版也画学校版行数:渲染前按 isInstitutionrowsInst
  • ❌ 图片直接丢:<image> 需调用方按 defaultSrc 加载后再 drawImage

自测

node references/selftest.js   # 验证解析/坐标换算/页码检测/复刻坐标,PASS 方可交付

引用文件

  • references/svg-to-elements.js — SVG 解析模块(UMD)
  • references/replica.js — Canvas 复刻渲染 + 页码检测(UMD)
  • references/selftest.js — Node 自测(桩 ctx 验证坐标换算)

注意事项

  • 元素坐标为 SVG 单位,渲染统一缩放;Canvas 内部尺寸固定 1240×1754。
  • canvas-grid-engine(负责"画"新网格)互补:本技能负责"复刻"已有模板。

教备神器 Canvas 工具链(组合使用)

本技能是「教备神器 · Canvas 工具链」的一环,四件组合覆盖「画 → 复刻 → 导出 → 验证」完整闭环:

  • Canvas 学习纸网格引擎(画):13 种教育网格 + 汉字居中 + 拼音标注,生成米字格/田字格字帖。
  • SVG 转 Canvas 复刻引擎(复刻):把现有纸质模板 SVG 零误差复刻成可改字、可打印的 Canvas。
  • Canvas 多页 PDF 导出(导出):多页 Canvas 一键合成标准 A4 PDF 直接打印。
  • 小程序 Canvas 验证工作流(验证):本地预览 + 截图视觉回归,杜绝格子歪、字偏。

完整方案与演示见「教备神器 Canvas 工具链落地页」(链接发布后回填)。

Related Skills