imagedd/main.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)
}
}