gg - Go 图形绘制库
gg 是一个 2D 图形绘制库,提供了类似 Canvas 的 API,支持绘制形状、文本、图像等。掌握 gg 是开发图表、图像处理应用的基础。
基础绘制
📝 创建和保存
package main
import "github.com/fogleman/gg"
func main() {
// 创建画布
dc := gg.NewContext(400, 400)
// 设置背景色
dc.SetRGB(1, 1, 1)
dc.Clear()
// 保存为 PNG
dc.SavePNG("output.png")
// 保存为 JPG
dc.SaveJPG("output.jpg", 90)
}
绘制形状
📝 基本形状
package main
import "github.com/fogleman/gg"
func main() {
dc := gg.NewContext(400, 400)
dc.SetRGB(1, 1, 1)
dc.Clear()
// 绘制点
dc.SetRGB(1, 0, 0)
dc.DrawPoint(50, 50, 5)
dc.Fill()
// 绘制直线
dc.SetRGB(0, 1, 0)
dc.MoveTo(100, 100)
dc.LineTo(200, 200)
dc.Stroke()
// 绘制矩形
dc.SetRGB(0, 0, 1)
dc.DrawRectangle(50, 150, 100, 80)
dc.Fill()
// 绘制圆形
dc.SetRGB(1, 1, 0)
dc.DrawCircle(300, 100, 50)
dc.Stroke()
// 绘制椭圆
dc.DrawEllipse(300, 250, 80, 40)
dc.Fill()
// 绘制圆弧
dc.DrawArc(200, 300, 50, 0, gg.Radians(270))
dc.Stroke()
dc.SavePNG("shapes.png")
}
绘制文本
📝 文本渲染
package main
import "github.com/fogleman/gg"
func main() {
dc := gg.NewContext(400, 400)
dc.SetRGB(1, 1, 1)
dc.Clear()
// 加载字体
if err := dc.LoadFontFace("arial.ttf", 24); err != nil {
panic(err)
}
// 设置文本颜色
dc.SetRGB(0, 0, 0)
// 绘制文本
dc.DrawString("Hello, World!", 50, 50)
// 居中文本
dc.DrawStringAnchored("Centered", 200, 200, 0.5, 0.5)
// 多行文本
dc.DrawStringWrapped(
"This is a long text that wraps to multiple lines.",
200, 300, 0.5, 0.5,
150, 1.5,
)
dc.SavePNG("text.png")
}
高级功能
📝 变换和效果
package main
import "github.com/fogleman/gg"
func main() {
dc := gg.NewContext(400, 400)
dc.SetRGB(1, 1, 1)
dc.Clear()
// 平移
dc.Translate(100, 100)
dc.DrawCircle(0, 0, 50)
dc.Fill()
// 旋转
dc.Rotate(gg.Radians(45))
dc.DrawRectangle(-25, -25, 50, 50)
dc.Fill()
// 缩放
dc.Scale(1.5, 1.5)
dc.DrawCircle(100, 100, 30)
dc.Fill()
// 渐变填充
dc.SetLinearGradient(0, 0, 400, 400)
dc.DrawRectangle(0, 0, 400, 400)
dc.Fill()
// 加载和绘制图像
img, _ := gg.LoadImage("input.png")
dc.DrawImage(img, 50, 50)
dc.SavePNG("advanced.png")
}