feat: 新增APNG支持,添加SaveToApng方法并更新main.go以处理APNG精灵。

This commit is contained in:
lixiangwuxian 2025-05-14 00:08:11 +08:00
parent abcab9dfc7
commit 82e3548628
2 changed files with 30 additions and 0 deletions

View File

@ -149,6 +149,9 @@ func main() {
if err := board.SaveToGif("test.gif"); err != nil {
log.Fatal(err)
}
if err := board.SaveToApng("test.apng"); err != nil {
log.Fatal(err)
}
if err := board.SaveToWebp("test.webp"); err != nil {
log.Fatal(err)
}

View File

@ -12,6 +12,7 @@ import (
"sort"
"github.com/HugoSmits86/nativewebp"
"github.com/kettek/apng"
)
// 设置为true启用调试日志
@ -959,3 +960,29 @@ func (b *NamedSpriteBoard) SaveToWebp(filename string) error {
}
return nil
}
func (b *NamedSpriteBoard) SaveToApng(filename string) error {
frames, delays := b.RenderToAnimatedImage()
if len(frames) == 0 {
return errors.New("no frames to save")
}
apngData := apng.APNG{
Frames: make([]apng.Frame, len(frames)),
}
for i, frame := range frames {
apngData.Frames[i] = apng.Frame{
Image: frame,
DelayNumerator: uint16(delays[i]),
DelayDenominator: 100,
}
}
f, err := os.Create(filename)
if err != nil {
return err
}
defer f.Close()
if err := apng.Encode(f, apngData); err != nil {
return err
}
return nil
}