Files
wordcloud/docs/CANVAS_STUDIO.md
T
2026-07-04 02:40:45 +08:00

68 lines
3.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 画布与贴纸功能
本文档描述当前前端代码中已经实现的画布设计功能。事实来源是 `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 总图导出。