# draw-studio
**Repository Path**: shychen/draw-studio
## Basic Information
- **Project Name**: draw-studio
- **Description**: vue3 canvas typescript html5 sass draw v3 ts h5 基于 Canvas 的 Vue 3 绘图板组件,支持撤销/重做、背景图片、H5 移动端等功能。
- **Primary Language**: JavaScript
- **License**: MIT
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2026-01-30
- **Last Updated**: 2026-02-02
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# DrawStudio - Vue 3 绘图板组件
基于 Canvas 的 Vue 3 绘图板组件,支持撤销/重做、背景图片、H5 移动端等功能。
## 特性
- ✏️ **自由绘制** - 支持铅笔等绘图工具
- 🔄 **历史记录** - 撤销/重做功能,可配置最大步数
- 🖼️ **背景图片** - 支持设置背景图片,多种填充模式
- 📱 **H5 支持** - 完美支持移动端触摸操作
- ⚡ **性能优化** - 离屏 Canvas 技术,撤销/重做无闪烁
- 🎨 **可定制** - 支持自定义工具栏位置、颜色、线宽等
- 💾 **导出功能** - 支持导出为 PNG 格式
- 🔧 **TypeScript** - 完整的类型定义
## 安装
```bash
npm install draw-studio
# 或
yarn add draw-studio
# 或
pnpm add draw-studio
```
## 快速开始
### 全局注册
```javascript
import { createApp } from 'vue'
import DrawStudio from 'draw-studio'
import 'draw-studio/dist/draw-studio.css'
const app = createApp(App)
app.use(DrawStudio)
```
### 局部使用
```vue
```
## 组件属性
| 属性 | 类型 | 默认值 | 说明 |
|------|------|--------|------|
| `width` | `Number` | `500` | 画布宽度(px) |
| `height` | `Number` | `500` | 画布高度(px) |
| `backgroundColor` | `String` | `'#FFFFFF'` | 背景颜色 |
| `useBackgroundImage` | `Boolean` | `false` | 是否使用背景图片 |
| `backgroundImage` | `String` | `''` | 背景图片 URL |
| `backgroundImageMode` | `String` | `'cover'` | 背景图片填充模式 |
| `mode` | `Number` | `pencil` | 绘图模式:`pencil`-铅笔/`pen`-钢笔 |
| `lineWidth` | `Number` | `3` | 线条宽度(1-50px) |
| `color` | `String` | `'#000000'` | 绘制颜色 |
| `useToolbar` | `Boolean` | `true` | 是否显示工具栏 |
| `toolbarPosition` | `String` | `'top'` | 工具栏位置:`'top'`/`'right'`/`'bottom'`/`'left'` |
| `useHistory` | `Boolean` | `true` | 是否启用历史记录 |
| `maxHistory` | `Number` | `20` | 最大历史记录步数 |
| `useOffscreen` | `Boolean` | `false` | 是否使用离屏Canvas优化 |
## 事件
| 事件 | 参数 | 说明 |
|------|------|------|
| `update:line-width` | `lineWidth: number` | 线条宽度变化 |
| `update:color` | `color: string` | 颜色变化 |
| `draw` | `canvas, context, position` | 绘制时触发 |
| `undo` | `canvas, context, imageData` | 撤销时触发 |
| `redo` | `canvas, context, imageData` | 重做时触发 |
| `clear` | `canvas, context` | 清空画布时触发 |
| `download` | `canvas, context` | 下载图片时触发 |
## 使用示例
### 基础配置
```vue
```
### 背景图片
```vue
```
### 自定义工具栏
```vue
```
## CDN 使用
```html
```
## 暴露的方法
通过 `ref` 可以调用以下方法:
| 方法 | 说明 |
|------|------|
| `undo()` | 执行撤销 |
| `redo()` | 执行重做 |
| `clear()` | 清空画布 |
| `download(name?)` | 下载图片,可指定文件名 |
## 开发
```bash
# 克隆项目
git clone https://github.com/gmingchen/draw-studio.git
cd draw-studio
# 安装依赖
pnpm install
# 启动开发服务器
pnpm run dev:vue3
# 构建
pnpm run build
```
## 项目结构
```
draw-studio/
├── src/ # 主入口
├── packages/ # 包目录
│ ├── draw-studio-for-vue3/ # Vue 3 组件实现
│ │ ├── src/ # 组件源代码
│ │ │ ├── components/ # 子组件
│ │ │ ├── draw-studio.ts # 类型和属性定义
│ │ │ └── draw-studio.vue # 主组件
│ │ └── package.json # 包配置
│ ├── theme-chalk/ # 样式主题
│ │ └── src/ # 样式源代码
│ └── utils/ # 工具函数
│ └── canvas.ts # Canvas 相关工具
├── play/ # 演示项目
│ └── vue3/ # Vue 3 演示
├── dist/ # 构建输出
├── package.json # 项目配置
└── README.md # 项目文档
```
## 联系方式
- **GitHub**: [gmingchen/draw-studio](https://github.com/gmingchen/draw-studio)
- **Issue**: 欢迎在 [GitHub Issues](https://github.com/gmingchen/draw-studio/issues) 提出问题和建议
- **贡献**: 欢迎提交 Pull Request 来改进这个项目
### 扫码交流
|
个人微信
|
微信群
|