feat: 新增APNG支持,添加SaveToApng方法并更新main.go以处理APNG精灵。
This commit is contained in:
parent
abcab9dfc7
commit
82e3548628
3
main.go
3
main.go
@ -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)
|
||||
}
|
||||
|
@ -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
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user