153 lines
3.7 KiB
Go
153 lines
3.7 KiB
Go
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)
|
|
}
|
|
}
|