3.3 KiB
3.3 KiB
画布与贴纸功能
本文档描述当前前端代码中已经实现的画布设计功能。事实来源是 frontend/src/App.tsx、frontend/src/pages/CanvasStudio.tsx、frontend/src/components/ExportPanel.tsx、frontend/src/lib/stickerLibrary.ts 和 frontend/src/types.ts。
页面关系
- 应用默认进入画布设计页。
- 画布页顶部的“添加词云”会切换到原有词云生成页。
- 词云生成页顶部的“返回画布”会回到画布设计页。
- 词云生成页的导出面板保留下载 SVG/位图功能,并新增“作为贴纸导入贴纸库”。
贴纸库
贴纸库是前端本地能力,不依赖后端接口:
- 存储位置:
localStorage的wordcloud-sticker-library。 - 数据类型:
StickerAsset,当前支持svg和image两类,已实现入口主要使用svg。 - 用户导入 SVG:画布页左侧“贴纸”面板读取
.svg文件文本,写入贴纸库,并立即插入画布。 - 词云作为贴纸:导出面板按当前 SVG 导出参数请求
/api/jobs/{job_id}/custom.svg,读取返回的 SVG 文本后写入贴纸库。 - 贴纸删除只删除本地贴纸库记录,不会删除已经导出的总图文件。
画布模型
画布文档保存在 localStorage 的 wordcloud-canvas-document。
当前模型字段:
width:画布宽度,默认1600。height:画布高度,默认1000。background:画布背景色,默认#ffffff。elements:画布元素数组。
当前元素类型:
sticker:引用贴纸库中的 SVG 或图片。text:普通文字,支持内容、颜色、字号、字体、字重、位置、尺寸、旋转、透明度。rect:矩形,支持填充、描边、描边宽度、位置、尺寸、旋转、透明度。ellipse:椭圆,支持填充、描边、描边宽度、位置、尺寸、旋转、透明度。line:线条,支持描边、描边宽度、位置、尺寸、旋转、透明度。
编辑行为
- 点击贴纸库中的贴纸会把该贴纸插入画布中央区域。
- 画布元素可拖拽移动。
- 选中元素后可通过右下角手柄调整大小。
- 右侧属性面板可以精确编辑位置、尺寸、旋转、透明度和元素特有属性。
- 右侧属性面板提供上移、下移和删除。
- 画布面板支持修改画布宽高、背景色、导出 SVG、清空画布。
SVG 导出
“导出总图 SVG”由前端序列化当前画布模型完成:
- 导出文件名:
canvas-design.svg。 - 背景输出为一个覆盖全画布的
<rect>。 - 贴纸输出为
<image>,SVG 贴纸会以内联data:image/svg+xml的形式嵌入。 - 文字输出为
<text>。 - 基础形状输出为原生 SVG 的
<rect>、<ellipse>、<line>。 - 元素的位移和旋转写入 SVG
transform,透明度写入opacity。
当前边界
- 贴纸库和画布文档只保存在当前浏览器本地,不会跨浏览器或跨设备同步。
- 当前没有服务端素材库、项目文件格式或协作编辑接口。
- SVG 导入按用户信任文件处理;编辑器预览使用图片方式加载,不在页面中直接执行 SVG 内容。
- 当前缩放只影响编辑视图,不改变导出尺寸。
- 当前导出目标是 SVG;没有在画布页实现 PNG/JPG 总图导出。