feat: 添加GIF支持,更新SaveToGIF方法以使用WebSafe调色板,新增nailong.gif文件,更新main.go以处理GIF精灵。
This commit is contained in:
parent
46f967360b
commit
c482f721b1
2
.gitignore
vendored
2
.gitignore
vendored
@ -1,2 +1,4 @@
|
||||
test.png
|
||||
.vscode/launch.json
|
||||
imagedd
|
||||
test.gif
|
||||
|
61
main.go
61
main.go
@ -1,9 +1,13 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"image"
|
||||
"image/color"
|
||||
"image/png"
|
||||
"log"
|
||||
"math"
|
||||
"os"
|
||||
|
||||
"git.lxtend.com/lixiangwuxian/imagedd/sprite"
|
||||
"git.lxtend.com/lixiangwuxian/imagedd/text2img"
|
||||
@ -56,25 +60,25 @@ func main() {
|
||||
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)
|
||||
// }
|
||||
{
|
||||
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{
|
||||
@ -125,5 +129,24 @@ func main() {
|
||||
}
|
||||
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)
|
||||
}
|
||||
}
|
||||
|
@ -2,6 +2,7 @@ package sprite
|
||||
|
||||
import (
|
||||
"image"
|
||||
"image/color/palette"
|
||||
"image/draw"
|
||||
"image/gif"
|
||||
"image/png"
|
||||
@ -877,9 +878,9 @@ func (b *NamedSpriteBoard) SaveToGIF(filename string) error {
|
||||
}
|
||||
defer f.Close()
|
||||
|
||||
// 将RGBA图像转换为Paletted图像
|
||||
// 将RGBA图像转换为Paletted图像,使用WebSafe调色板
|
||||
bounds := img.Bounds()
|
||||
palettedImg := image.NewPaletted(bounds, nil)
|
||||
palettedImg := image.NewPaletted(bounds, palette.WebSafe)
|
||||
draw.Draw(palettedImg, bounds, img, bounds.Min, draw.Src)
|
||||
|
||||
// 将图像编码为GIF并写入文件
|
||||
@ -899,7 +900,7 @@ func (b *NamedSpriteBoard) SaveToGIF(filename string) error {
|
||||
// 转换所有帧为Paletted图像
|
||||
for i, frame := range frames {
|
||||
bounds := frame.Bounds()
|
||||
palettedFrames[i] = image.NewPaletted(bounds, nil)
|
||||
palettedFrames[i] = image.NewPaletted(bounds, palette.WebSafe)
|
||||
draw.Draw(palettedFrames[i], bounds, frame, bounds.Min, draw.Src)
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user