package main import ( "bytes" "image" "image/color" "image/png" "log" "math" "os" "git.lxtend.com/lixiangwuxian/imagedd/sprite" "git.lxtend.com/lixiangwuxian/imagedd/text2img" ) func main() { board := sprite.NewNamedSpriteBoard() { whiteBackground := image.NewRGBA(image.Rect(0, 0, 200, 200)) for i := range whiteBackground.Bounds().Dx() { for j := range whiteBackground.Bounds().Dy() { whiteBackground.Set(i, j, color.White) } } board.AddSprite(&sprite.Sprite{ Name: "background", Images: []image.Image{whiteBackground}, CurrentFrame: 0, Index: 0, Position: image.Point{X: 0, Y: 0}, }) } { wordSprite := &sprite.Sprite{ Name: "word", Images: []image.Image{}, CurrentFrame: 0, Index: 5, Position: image.Point{X: -30, Y: 30}, } img, err := text2img.RenderCharToImage(nil, '🀣', 40, color.Black) if err != nil { log.Fatal(err) } wordSprite.AddFrame(img) board.AddSprite(wordSprite) } { textSprite := &sprite.Sprite{ Name: "text", Images: []image.Image{}, CurrentFrame: 0, Index: 5, Position: image.Point{X: 10, Y: 12}, } img, err := text2img.RenderTextToTrimmedImage(nil, "ddjdgjζ΅‹θ―•\nζ΅‹θ―•πŸ“§ζ΅‹βœŒθ―•ζ΅‹\nθ―•πŸ₯³πŸ§πŸ°\nπŸŽπŸŽ‚πŸŽˆπŸŽΊπŸŽ‰πŸŽŠ\nπŸ“§πŸ§ΏπŸŒΆadadadadaπŸ”‹πŸ˜‚β€πŸ˜πŸ€£πŸ˜ŠπŸ₯Ί\nπŸ™πŸ’•πŸ˜­πŸ˜˜πŸ‘\nπŸ˜…πŸ‘ζ΅‹θ―•ζ΅‹θ―•", 12, color.Black, 0, 0) if err != nil { log.Fatal(err) } textSprite.AddFrame(img) board.AddSprite(textSprite) } { faceBytes, err := os.ReadFile("face.png") if err != nil { log.Fatal(err) } faceImage, err := png.Decode(bytes.NewReader(faceBytes)) if err != nil { log.Fatal(err) } faceSprite := &sprite.Sprite{ Name: "face", Images: []image.Image{faceImage}, CurrentFrame: 0, Index: 1, Position: image.Point{X: -100, Y: -100}, } faceSprite.Rotate(math.Pi / 2) board.AddSprite(faceSprite) } { rect := image.NewRGBA(image.Rect(0, 0, 101, 101)) rectSprite := &sprite.Sprite{ Name: "rect", Images: []image.Image{rect}, CurrentFrame: 0, Index: 20, Position: image.Point{X: 20, Y: 20}, } lineL := &sprite.Line{ Start: image.Point{X: 0, Y: 100}, End: image.Point{X: 50, Y: 0}, Width: 1, Color: color.RGBA{0, 0, 0, 255}, } lineL.AddToSprite(rectSprite) lineR := &sprite.Line{ Start: image.Point{X: 100, Y: 100}, End: image.Point{X: 50, Y: 0}, Width: 1, Color: color.RGBA{0, 0, 0, 255}, } lineR.AddToSprite(rectSprite) lineB := &sprite.Line{ Start: image.Point{X: 0, Y: 100}, End: image.Point{X: 100, Y: 100}, Width: 1, Color: color.RGBA{0, 0, 0, 255}, } lineB.AddToSprite(rectSprite) board.AddSprite(rectSprite) } { circleSprite := &sprite.Sprite{ Name: "circle", Images: []image.Image{image.NewRGBA(image.Rect(0, 0, 101, 101))}, CurrentFrame: 0, Index: 3, Position: image.Point{X: 30, Y: 20}, } for r := 15.0; r < 45.0; r += 0.01 { circle := &sprite.Circle{ Center: image.Point{X: 50, Y: 50}, Radius: r, Color: color.RGBA{0, 0, 255, 255}, } circle.AddToSprite(circleSprite) } board.AddSprite(circleSprite) } { gifSprite := &sprite.Sprite{ Name: "gif", Images: []image.Image{}, CurrentFrame: 0, Index: 4, Position: image.Point{X: 40, Y: 20}, } gifImage, delays, err := sprite.LoadImageFile("nailong.gif") if err != nil { log.Fatal(err) } gifSprite.SetFrames(gifImage) gifSprite.Delay = delays board.AddSprite(gifSprite) } board.SaveToPng("test.png") if err := board.SaveToGIF("test.gif"); err != nil { log.Fatal(err) } }