golang基于网格的2D图形绘制插件库gridder的使用
Golang基于网格的2D图形绘制插件库gridder的使用
gridder是一个基于Go Graphics构建的库,旨在简化使用2D图形可视化网格。
安装
go get github.com/shomali11/gridder
示例代码
示例1:基本网格配置
package main
import (
"image/color"
"log"
"github.com/shomali11/gridder"
)
func main() {
imageConfig := gridder.ImageConfig{Name: "example1.png"}
gridConfig := gridder.GridConfig{
Rows: 4,
Columns: 8,
MarginWidth: 0,
LineDashes: 0,
LineStrokeWidth: 2,
BorderDashes: 0,
BorderStrokeWidth: 10,
LineColor: color.Gray{},
BorderColor: color.RGBA{B: 255, A: 255},
BackgroundColor: color.White,
}
grid, err := gridder.New(imageConfig, gridConfig)
if err != nil {
log.Fatal(err)
}
grid.SavePNG()
}
示例2:自定义图像大小和网格样式
package main
import (
"image/color"
"log"
"github.com/shomali11/gridder"
)
func main() {
imageConfig := gridder.ImageConfig{
Width: 500,
Height: 500,
Name: "example2.png",
}
gridConfig := gridder.GridConfig{
Rows: 4,
Columns: 4,
MarginWidth: 20,
LineDashes: 10,
LineStrokeWidth: 2,
BorderDashes: 20,
BorderStrokeWidth: 4,
LineColor: color.RGBA{R: 255 / 2, A: 255},
BorderColor: color.RGBA{B: 255 / 2, A: 255},
BackgroundColor: color.RGBA{G: 255 / 2, A: 255},
}
grid, err := gridder.New(imageConfig, gridConfig)
if err != nil {
log.Fatal(err)
}
grid.SavePNG()
}
示例3:绘制单元格
package main
import (
"image/color"
"log"
"github.com/shomali11/gridder"
)
func main() {
imageConfig := gridder.ImageConfig{
Width: 500,
Height: 500,
Name: "example3.png",
}
gridConfig := gridder.GridConfig{
Rows: 4,
Columns: 4,
LineStrokeWidth: 2,
BorderStrokeWidth: 4,
}
grid, err := gridder.New(imageConfig, gridConfig)
if err != nil {
log.Fatal(err)
}
grid.PaintCell(1, 2, color.Black)
grid.SavePNG()
}
示例4:绘制矩形
package main
import (
"image/color"
"log"
"github.com/shomali11/gridder"
)
func main() {
imageConfig := gridder.ImageConfig{
Width: 500,
Height: 500,
Name: "example4.png",
}
gridConfig := gridder.GridConfig{
Rows: 4,
Columns: 4,
LineStrokeWidth: 2,
BorderStrokeWidth: 4,
}
grid, err := gridder.New(imageConfig, gridConfig)
if err != nil {
log.Fatal(err)
}
grid.DrawRectangle(0, 0, gridder.RectangleConfig{Width: 60, Height: 60, Color: color.Black, Stroke: true, Rotate: 45})
grid.DrawRectangle(3, 0, gridder.RectangleConfig{Width: 60, Height: 60, Color: color.Black, Stroke: true, Rotate: 45, Dashes: 10})
grid.DrawRectangle(0, 3, gridder.RectangleConfig{Width: 60, Height: 60, Color: color.Black, Stroke: true, StrokeWidth: 25})
grid.DrawRectangle(2, 1, gridder.RectangleConfig{Width: 180, Height: 180, Color: color.RGBA{R: 255 / 2, A: 255 / 2}})
grid.DrawRectangle(3, 3, gridder.RectangleConfig{Width: 60, Height: 60, Color: color.Black, Stroke: false})
grid.SavePNG()
}
示例5:绘制圆形
package main
import (
"image/color"
"log"
"github.com/shomali11/gridder"
)
func main() {
imageConfig := gridder.ImageConfig{
Width: 500,
Height: 500,
Name: "example5.png",
}
gridConfig := gridder.GridConfig{
Rows: 4,
Columns: 4,
LineStrokeWidth: 2,
BorderStrokeWidth: 4,
}
grid, err := gridder.New(imageConfig, gridConfig)
if err != nil {
log.Fatal(err)
}
grid.DrawCircle(0, 0, gridder.CircleConfig{Radius: 30, Color: color.Black, Stroke: true})
grid.DrawCircle(3, 0, gridder.CircleConfig{Radius: 30, Color: color.Black, Stroke: true, Dashes: 10})
grid.DrawCircle(0, 3, gridder.CircleConfig{Radius: 30, Color: color.Black, Stroke: true, StrokeWidth: 25})
grid.DrawCircle(2, 1, gridder.CircleConfig{Radius: 90, Color: color.RGBA{R: 255 / 2, A: 255 / 2}})
grid.DrawCircle(3, 3, gridder.CircleConfig{Radius: 30, Color: color.Black, Stroke: false})
grid.SavePNG()
}
示例6:绘制线条
package main
import (
"image/color"
"log"
"github.com/shomali11/gridder"
)
func main() {
imageConfig := gridder.ImageConfig{
Width: 500,
Height: 500,
Name: "example6.png",
}
gridConfig := gridder.GridConfig{
Rows: 4,
Columns: 4,
MarginWidth: 30,
LineStrokeWidth: 2,
BorderStrokeWidth: 4,
}
grid, err := gridder.New(imageConfig, gridConfig)
if err != nil {
log.Fatal(err)
}
grid.DrawLine(0, 0, gridder.LineConfig{Length: 60, Color: color.Black, Dashes: 0})
grid.DrawLine(0, 0, gridder.LineConfig{Length: 60, Color: color.Black, Dashes: 0, Rotate: 90})
grid.DrawLine(0, 3, gridder.LineConfig{Length: 60, Color: color.Black, Dashes: 0, StrokeWidth: 25})
grid.DrawLine(2, 1, gridder.LineConfig{Length: 90, Color: color.RGBA{R: 255 / 2, A: 255 / 2}, Rotate: 45})
grid.DrawLine(2, 1, gridder.LineConfig{Length: 90, Color: color.RGBA{R: 255 / 2, A: 255 / 2}, Rotate: 135})
grid.DrawLine(3, 3, gridder.LineConfig{Length: 60, Color: color.Black, Dashes: 5})
grid.SavePNG()
}
示例7:绘制路径
package main
import (
"image/color"
"log"
"github.com/shomali11/gridder"
)
func main() {
imageConfig := gridder.ImageConfig{
Width: 500,
Height: 500,
Name: "example7.png",
}
gridConfig := gridder.GridConfig{
Rows: 4,
Columns: 4,
LineStrokeWidth: 2,
BorderStrokeWidth: 4,
}
grid, err := gridder.New(imageConfig, gridConfig)
if err != nil {
log.Fatal(err)
}
grid.DrawPath(0, 0, 1, 1, gridder.PathConfig{Dashes: 0, StrokeWidth: 10, Color: color.Black})
grid.DrawPath(1, 1, 2, 1, gridder.PathConfig{Dashes: 5, StrokeWidth: 1, Color: color.Black})
grid.DrawPath(2, 1, 3, 1, gridder.PathConfig{Dashes: 8, StrokeWidth: 1, Color: color.Black})
grid.DrawPath(3, 1, 3, 2, gridder.PathConfig{Dashes: 0, StrokeWidth: 1, Color: color.Black})
grid.SavePNG()
}
示例8:绘制文本
package main
import (
"image/color"
"log"
"github.com/golang/freetype/truetype"
"github.com/shomali11/gridder"
"golang.org/x/image/font/gofont/goregular"
)
func main() {
imageConfig := gridder.ImageConfig{
Width: 500,
Height: 500,
Name: "example8.png",
}
gridConfig := gridder.GridConfig{
Rows: 4,
Columns: 4,
LineStrokeWidth: 2,
BorderStrokeWidth: 4,
}
grid, err := gridder.New(imageConfig, gridConfig)
if err != nil {
log.Fatal(err)
}
font, err := truetype.Parse(goregular.TTF)
if err != nil {
log.Fatal(err)
}
fontFace1 := truetype.NewFace(font, &truetype.Options{Size: 24})
fontFace2 := truetype.NewFace(font, &truetype.Options{Size: 35})
grid.DrawString(0, 0, "Hello!", fontFace1)
grid.DrawString(1, 1, "Hello!", fontFace1, gridder.StringConfig{Rotate: 45})
grid.DrawString(2, 2, "Hello!", fontFace2, gridder.StringConfig{Color: color.RGBA{B: 255 / 2, A: 255 / 2}})
grid.SavePNG()
}
示例9:绘制最短路径
package main
import (
"image/color"
"log"
"github.com/golang/freetype/truetype"
"github.com/shomali11/gridder"
"golang.org/x/image/font/gofont/goregular"
)
func main() {
imageConfig := gridder.ImageConfig{
Width: 2000,
Height: 1000,
Name: "example9.png",
}
gridConfig := gridder.GridConfig{
Rows: 4,
Columns: 8,
MarginWidth: 32,
LineStrokeWidth: 2,
BorderStrokeWidth: 20,
}
grid, err := gridder.New(imageConfig, gridConfig)
if err != nil {
log.Fatal(err)
}
font, err := truetype.Parse(goregular.TTF)
if err != nil {
log.Fatal(err)
}
fontFace := truetype.NewFace(font, &truetype.Options{Size: 48})
lineConfig := gridder.PathConfig{Dashes: 10}
circleConfig := gridder.CircleConfig{Color: color.Gray{}, Radius: 10}
grid.PaintCell(1, 2, color.NRGBA{R: 0, G: 0, B: 0, A: 255 / 2})
grid.DrawString(1, 2, "Block", fontFace)
grid.DrawCircle(0, 0, gridder.CircleConfig{Color: color.NRGBA{R: 255 / 2, G: 0, B: 0, A: 255 / 2}, Radius: 60})
grid.DrawPath(0, 0, 1, 1, lineConfig)
grid.DrawCircle(1, 1, circleConfig)
grid.DrawPath(1, 1, 2, 2, lineConfig)
grid.DrawCircle(2, 2, circleConfig)
grid.DrawPath(2, 2, 2, 3, lineConfig)
grid.DrawCircle(2, 3, circleConfig)
grid.DrawPath(2, 3, 2, 4, lineConfig)
grid.DrawCircle(2, 4, circleConfig)
grid.DrawPath(2, 4, 2, 5, lineConfig)
grid.DrawCircle(2, 5, circleConfig)
grid.DrawPath(2, 5, 2, 6, lineConfig)
grid.DrawCircle(2, 6, circleConfig)
grid.DrawPath(2, 6, 3, 7, lineConfig)
grid.DrawCircle(3, 7, gridder.CircleConfig{Color: color.NRGBA{R: 0, G: 255 / 2, B: 0, A: 255 / 2}, Radius: 60})
grid.SavePNG()
}
示例10:绘制Bingo卡
package main
import (
"image/color"
"log"
"github.com/golang/freetype/truetype"
"github.com/shomali11/gridder"
"golang.org/x/image/font/gofont/goregular"
)
func main() {
imageConfig := gridder.ImageConfig{
Width: 1000,
Height: 1200,
Name: "example10.png",
}
gridConfig := gridder.GridConfig{
Rows: 6,
Columns: 5,
MarginWidth: 32,
LineStrokeWidth: 2,
BackgroundColor: color.RGBA{R: 135, G: 211, B: 124, A: 255},
}
grid, err := gridder.New(imageConfig, gridConfig)
if err != nil {
log.Fatal(err)
}
font, err := truetype.Parse(goregular.TTF)
if err != nil {
log.Fatal(err)
}
headerFontFace := truetype.NewFace(font, &truetype.Options{Size: 100})
valueFontFace := truetype.NewFace(font, &truetype.Options{Size: 50})
headers := []string{"B", "I", "N", "G", "O"}
values := [][]string{
{"10", "22", "41", "53", "71"},
{"66", "20", "40", "50", "2"},
{"14", "26", "FREE", "52", "69"},
{"15", "29", "37", "51", "65"},
{"17", "6", "35", "55", "64"},
}
circleConfig := gridder.CircleConfig{Radius: 60, Color: color.White}
for i, header := range headers {
grid.DrawCircle(0, i, circleConfig)
grid.DrawString(0, i, header, headerFontFace)
}
for row := range values {
for column := range values[0] {
grid.PaintCell(row+1, column, color.White)
grid.DrawString(row+1, column, values[row][column], valueFontFace)
}
}
grid.SavePNG()
}
示例11:绘制井字棋
package main
import (
"image/color"
"log"
"github.com/shomali11/gridder"
)
func main() {
imageConfig := gridder.ImageConfig{
Width: 500,
Height: 500,
Name: "example11.png",
}
gridConfig := gridder.GridConfig{
Rows: 3,
Columns: 3,
LineStrokeWidth: 2,
BorderStrokeWidth: 4,
LineColor: color.Gray{},
BorderColor: color.Gray{},
BackgroundColor: color.NRGBA{R: 220, G: 220, B: 220, A: 255},
}
grid, err := gridder.New(imageConfig, gridConfig)
if err != nil {
log.Fatal(err)
}
blue := color.RGBA{B: 128, A: 255}
green := color.RGBA{G: 128, A: 255}
grid.DrawCircle(0, 0, gridder.CircleConfig{Radius: 60, Color: blue, StrokeWidth: 4, Stroke: true})
grid.DrawCircle(1, 1, gridder.CircleConfig{Radius: 60, Color: blue, StrokeWidth: 4, Stroke: true})
grid.DrawCircle(2, 2, gridder.CircleConfig{Radius: 60, Color: blue, StrokeWidth: 4, Stroke: true})
grid.DrawLine(2, 0, gridder.LineConfig{Length: 120, Color: green, StrokeWidth: 4, Rotate: 45})
grid.DrawLine(2, 0, gridder.LineConfig{Length: 120, Color: green, StrokeWidth: 4, Rotate: 135})
grid.D
更多关于golang基于网格的2D图形绘制插件库gridder的使用的实战教程也可以访问 https://www.itying.com/category-94-b0.html
1 回复
更多关于golang基于网格的2D图形绘制插件库gridder的使用的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
Golang基于网格的2D图形绘制插件库gridder使用指南
gridder是一个简单易用的Golang 2D图形绘制库,它基于网格系统来组织和定位元素。下面我将详细介绍如何使用gridder库。
安装gridder
首先安装gridder库:
go get github.com/shomali11/gridder
基本用法
1. 创建画布
package main
import (
"github.com/shomali11/gridder"
"image/color"
)
func main() {
// 创建画布配置
gridConfig := gridder.GridConfig{
Dimensions: 5, // 5x5网格
Width: 1000, // 画布宽度
Height: 1000, // 画布高度
LineColor: color.Black, // 网格线颜色
LineWidth: 2, // 网格线宽度
}
// 创建画布
grid, err := gridder.New(gridConfig)
if err != nil {
panic(err)
}
}
2. 绘制基本图形
// 在(1,1)位置绘制一个圆
grid.DrawCircle(1, 1, gridder.CircleConfig{
Color: color.RGBA{R: 255, A: 255}, // 红色
Radius: 30,
})
// 在(3,3)位置绘制一个矩形
grid.DrawRectangle(3, 3, gridder.RectangleConfig{
Color: color.RGBA{B: 255, A: 255}, // 蓝色
Width: 50,
Height: 30,
})
// 在(2,4)位置绘制一条线
grid.DrawLine(2, 4, gridder.LineConfig{
Color: color.RGBA{G: 255, A: 255}, // 绿色
Width: 3,
ToX: 4, // 终点X坐标
ToY: 4, // 终点Y坐标
})
// 保存为PNG文件
err = grid.SaveImage("output.png")
if err != nil {
panic(err)
}
3. 绘制文本
grid.DrawString(2, 2, "Hello Gridder!", gridder.StringConfig{
Color: color.Black,
FontSize: 20,
FontPath: "/path/to/font.ttf", // 可选,使用自定义字体
})
高级功能
1. 自定义网格样式
gridConfig := gridder.GridConfig{
Dimensions: 10,
Width: 2000,
Height: 2000,
LineColor: color.RGBA{R: 200, G: 200, B: 200, A: 255}, // 浅灰色网格线
LineWidth: 1,
Background: color.White, // 白色背景
Border: true, // 显示边框
}
2. 绘制路径
// 定义路径点
points := []gridder.Point{
{X: 1, Y: 1},
{X: 2, Y: 3},
{X: 4, Y: 2},
{X: 5, Y: 5},
}
grid.DrawPath(points, gridder.PathConfig{
Color: color.RGBA{R: 255, A: 255},
Width: 4,
})
3. 绘制图像
// 在(3,3)位置绘制图像
grid.DrawImage(3, 3, "/path/to/image.png", gridder.ImageConfig{
Width: 100, // 显示宽度
Height: 100, // 显示高度
})
完整示例
package main
import (
"github.com/shomali11/gridder"
"image/color"
)
func main() {
// 创建画布配置
gridConfig := gridder.GridConfig{
Dimensions: 10,
Width: 2000,
Height: 2000,
LineColor: color.RGBA{R: 200, G: 200, B: 200, A: 255},
LineWidth: 1,
Background: color.White,
Border: true,
}
// 创建画布
grid, err := gridder.New(gridConfig)
if err != nil {
panic(err)
}
// 绘制图形
grid.DrawCircle(2, 2, gridder.CircleConfig{
Color: color.RGBA{R: 255, A: 255},
Radius: 50,
})
grid.DrawRectangle(5, 5, gridder.RectangleConfig{
Color: color.RGBA{B: 255, A: 255},
Width: 80,
Height: 60,
})
grid.DrawString(7, 7, "Gridder Demo", gridder.StringConfig{
Color: color.Black,
FontSize: 24,
})
// 保存图像
err = grid.SaveImage("demo.png")
if err != nil {
panic(err)
}
}
注意事项
- gridder使用网格坐标系统,原点(0,0)在左上角
- 坐标值从0开始,最大值为Dimensions-1
- 默认不显示网格线,需要设置LineWidth大于0才会显示
- 绘制文本时需要确保字体文件路径正确
gridder是一个轻量级的2D绘图库,适合简单的图表、示意图绘制。对于更复杂的图形需求,可以考虑使用更专业的库如gg或gonum/plot。