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
|
test.png
|
||||||
.vscode/launch.json
|
.vscode/launch.json
|
||||||
|
imagedd
|
||||||
|
test.gif
|
||||||
|
61
main.go
61
main.go
@ -1,9 +1,13 @@
|
|||||||
package main
|
package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"bytes"
|
||||||
"image"
|
"image"
|
||||||
"image/color"
|
"image/color"
|
||||||
|
"image/png"
|
||||||
"log"
|
"log"
|
||||||
|
"math"
|
||||||
|
"os"
|
||||||
|
|
||||||
"git.lxtend.com/lixiangwuxian/imagedd/sprite"
|
"git.lxtend.com/lixiangwuxian/imagedd/sprite"
|
||||||
"git.lxtend.com/lixiangwuxian/imagedd/text2img"
|
"git.lxtend.com/lixiangwuxian/imagedd/text2img"
|
||||||
@ -56,25 +60,25 @@ func main() {
|
|||||||
textSprite.AddFrame(img)
|
textSprite.AddFrame(img)
|
||||||
board.AddSprite(textSprite)
|
board.AddSprite(textSprite)
|
||||||
}
|
}
|
||||||
// {
|
{
|
||||||
// faceBytes, err := os.ReadFile("face.png")
|
faceBytes, err := os.ReadFile("face.png")
|
||||||
// if err != nil {
|
if err != nil {
|
||||||
// log.Fatal(err)
|
log.Fatal(err)
|
||||||
// }
|
}
|
||||||
// faceImage, err := png.Decode(bytes.NewReader(faceBytes))
|
faceImage, err := png.Decode(bytes.NewReader(faceBytes))
|
||||||
// if err != nil {
|
if err != nil {
|
||||||
// log.Fatal(err)
|
log.Fatal(err)
|
||||||
// }
|
}
|
||||||
// faceSprite := &sprite.Sprite{
|
faceSprite := &sprite.Sprite{
|
||||||
// Name: "face",
|
Name: "face",
|
||||||
// Images: []image.Image{faceImage},
|
Images: []image.Image{faceImage},
|
||||||
// CurrentFrame: 0,
|
CurrentFrame: 0,
|
||||||
// Index: 1,
|
Index: 1,
|
||||||
// Position: image.Point{X: -100, Y: -100},
|
Position: image.Point{X: -100, Y: -100},
|
||||||
// }
|
}
|
||||||
// faceSprite.Rotate(math.Pi / 2)
|
faceSprite.Rotate(math.Pi / 2)
|
||||||
// board.AddSprite(faceSprite)
|
board.AddSprite(faceSprite)
|
||||||
// }
|
}
|
||||||
{
|
{
|
||||||
rect := image.NewRGBA(image.Rect(0, 0, 101, 101))
|
rect := image.NewRGBA(image.Rect(0, 0, 101, 101))
|
||||||
rectSprite := &sprite.Sprite{
|
rectSprite := &sprite.Sprite{
|
||||||
@ -125,5 +129,24 @@ func main() {
|
|||||||
}
|
}
|
||||||
board.AddSprite(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")
|
board.SaveToPng("test.png")
|
||||||
|
if err := board.SaveToGIF("test.gif"); err != nil {
|
||||||
|
log.Fatal(err)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -2,6 +2,7 @@ package sprite
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"image"
|
"image"
|
||||||
|
"image/color/palette"
|
||||||
"image/draw"
|
"image/draw"
|
||||||
"image/gif"
|
"image/gif"
|
||||||
"image/png"
|
"image/png"
|
||||||
@ -877,9 +878,9 @@ func (b *NamedSpriteBoard) SaveToGIF(filename string) error {
|
|||||||
}
|
}
|
||||||
defer f.Close()
|
defer f.Close()
|
||||||
|
|
||||||
// 将RGBA图像转换为Paletted图像
|
// 将RGBA图像转换为Paletted图像,使用WebSafe调色板
|
||||||
bounds := img.Bounds()
|
bounds := img.Bounds()
|
||||||
palettedImg := image.NewPaletted(bounds, nil)
|
palettedImg := image.NewPaletted(bounds, palette.WebSafe)
|
||||||
draw.Draw(palettedImg, bounds, img, bounds.Min, draw.Src)
|
draw.Draw(palettedImg, bounds, img, bounds.Min, draw.Src)
|
||||||
|
|
||||||
// 将图像编码为GIF并写入文件
|
// 将图像编码为GIF并写入文件
|
||||||
@ -899,7 +900,7 @@ func (b *NamedSpriteBoard) SaveToGIF(filename string) error {
|
|||||||
// 转换所有帧为Paletted图像
|
// 转换所有帧为Paletted图像
|
||||||
for i, frame := range frames {
|
for i, frame := range frames {
|
||||||
bounds := frame.Bounds()
|
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)
|
draw.Draw(palettedFrames[i], bounds, frame, bounds.Min, draw.Src)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user