Go to file
kingecg a07d5940fc "重构Canvas库结构,完善文档和示例,优化绘图功能实现" 2025-07-08 23:02:54 +08:00
example "重构Canvas库结构,完善文档和示例,优化绘图功能实现" 2025-07-08 23:02:54 +08:00
origin "重构Canvas库结构,完善文档和示例,优化绘图功能实现" 2025-07-08 23:02:54 +08:00
.gitignore Initial commit 2025-07-08 22:39:40 +08:00
LICENSE Initial commit 2025-07-08 22:39:40 +08:00
README.md "重构Canvas库结构,完善文档和示例,优化绘图功能实现" 2025-07-08 23:02:54 +08:00
context.go "重构Canvas库结构,完善文档和示例,优化绘图功能实现" 2025-07-08 23:02:54 +08:00
draw.go "重构Canvas库结构,完善文档和示例,优化绘图功能实现" 2025-07-08 23:02:54 +08:00
geometry.go "重构Canvas库结构,完善文档和示例,优化绘图功能实现" 2025-07-08 23:02:54 +08:00
go.mod "重构Canvas库结构,完善文档和示例,优化绘图功能实现" 2025-07-08 23:02:54 +08:00
go.sum "重构Canvas库结构,完善文档和示例,优化绘图功能实现" 2025-07-08 23:02:54 +08:00
gradient.go "重构Canvas库结构,完善文档和示例,优化绘图功能实现" 2025-07-08 23:02:54 +08:00
path.go "重构Canvas库结构,完善文档和示例,优化绘图功能实现" 2025-07-08 23:02:54 +08:00
state.go "重构Canvas库结构,完善文档和示例,优化绘图功能实现" 2025-07-08 23:02:54 +08:00
style.go "重构Canvas库结构,完善文档和示例,优化绘图功能实现" 2025-07-08 23:02:54 +08:00
text.go "重构Canvas库结构,完善文档和示例,优化绘图功能实现" 2025-07-08 23:02:54 +08:00
util.go "重构Canvas库结构,完善文档和示例,优化绘图功能实现" 2025-07-08 23:02:54 +08:00

README.md

Canvas

Canvas 是一个用 Go 语言实现的 2D 绘图库,提供类似于 HTML5 Canvas API 的功能。它允许你在 Go 程序中创建和操作图像,支持基本的绘图操作、变换、渐变和文本渲染。

功能特性

  • 基本图形绘制:线条、矩形、圆形、路径
  • 填充和描边操作
  • 线性和径向渐变
  • 文本渲染
  • 变换操作:平移、旋转、缩放
  • 状态保存和恢复
  • 阴影效果

安装

go get github.com/yourusername/canvas

快速开始

以下是一个简单的示例,展示如何使用 Canvas 库创建一个包含矩形、圆形和文本的图像:

package main

import (
	"image/color"
	"image/png"
	"os"

	"github.com/golang/freetype/truetype"
	"golang.org/x/image/font/gofont/goregular"
	"github.com/yourusername/canvas"
)

func main() {
	// 创建一个300x200的画布
	ctx := canvas.NewContext(300, 200)

	// 设置背景色
	ctx.SetFillColor(color.RGBA{240, 240, 240, 255})
	ctx.FillRect(0, 0, 300, 200)

	// 绘制矩形
	ctx.SetFillColor(color.RGBA{200, 0, 0, 200})
	ctx.FillRect(20, 20, 100, 80)

	// 绘制圆形
	ctx.BeginPath()
	ctx.SetFillColor(color.RGBA{0, 0, 200, 200})
	ctx.Arc(200, 60, 40, 0, 2*3.14159)
	ctx.Fill()

	// 创建线性渐变
	gradient := canvas.NewLinearGradient(20, 120, 280, 180)
	gradient.AddColorStop(0, color.RGBA{255, 0, 0, 255})
	gradient.AddColorStop(0.5, color.RGBA{0, 255, 0, 255})
	gradient.AddColorStop(1, color.RGBA{0, 0, 255, 255})

	// 使用渐变填充矩形
	ctx.SetFillStyle(gradient)
	ctx.FillRect(20, 120, 260, 60)

	// 加载字体
	font, _ := truetype.Parse(goregular.TTF)
	face := truetype.NewFace(font, &truetype.Options{Size: 20})

	// 设置字体和文本属性
	ctx.SetFont(face)
	ctx.SetTextAlign("center")
	ctx.SetTextBaseline("middle")
	ctx.SetFillColor(color.RGBA{0, 0, 0, 255})
	ctx.FillText("Canvas 示例", 150, 30)

	// 保存为PNG图片
	img := ctx.Image()
	f, _ := os.Create("example.png")
	defer f.Close()
	png.Encode(f, img)
}

API 参考

上下文创建

  • NewContext(width, height int) *Context - 创建新的绘图上下文

路径操作

  • BeginPath() - 开始新路径
  • MoveTo(x, y float64) - 移动到指定位置
  • LineTo(x, y float64) - 绘制线段到指定位置
  • Arc(x, y, radius, startAngle, endAngle float64) - 绘制圆弧
  • Rect(x, y, width, height float64) - 绘制矩形路径
  • ClosePath() - 闭合路径

绘制操作

  • Fill() - 填充当前路径
  • Stroke() - 描边当前路径
  • FillRect(x, y, width, height float64) - 填充矩形
  • StrokeRect(x, y, width, height float64) - 描边矩形
  • ClearRect(x, y, width, height float64) - 清除矩形区域

样式设置

  • SetFillStyle(style interface{}) - 设置填充样式
  • SetStrokeStyle(style interface{}) - 设置描边样式
  • SetFillColor(color color.Color) - 设置填充颜色
  • SetStrokeColor(color color.Color) - 设置描边颜色
  • SetLineWidth(width float64) - 设置线宽
  • SetGlobalAlpha(alpha float64) - 设置全局透明度
  • SetShadow(offsetX, offsetY, blur float64, color color.Color) - 设置阴影

渐变

  • NewLinearGradient(x0, y0, x1, y1 float64) *LinearGradient - 创建线性渐变
  • NewRadialGradient(x0, y0, r0, x1, y1, r1 float64) *RadialGradient - 创建径向渐变
  • AddColorStop(offset float64, color color.Color) - 添加渐变色标

文本操作

  • SetFont(face font.Face) - 设置字体
  • SetTextAlign(align string) - 设置文本对齐方式
  • SetTextBaseline(baseline string) - 设置文本基线
  • FillText(text string, x, y float64) - 绘制填充文本
  • StrokeText(text string, x, y float64) - 绘制描边文本
  • MeasureText(text string) float64 - 测量文本宽度

变换操作

  • Save() - 保存当前状态
  • Restore() - 恢复上一个状态
  • Translate(x, y float64) - 平移变换
  • Rotate(angle float64) - 旋转变换
  • Scale(sx, sy float64) - 缩放变换
  • Transform(a, b, c, d, e, f float64) - 应用变换矩阵
  • SetTransform(a, b, c, d, e, f float64) - 设置变换矩阵

图像操作

  • Image() *image.RGBA - 获取底层图像

依赖

  • golang.org/x/image/font - 用于文本渲染
  • github.com/golang/freetype/truetype - 用于字体处理(示例中使用)

许可证

MIT