feat: 添加WebP支持,更新SaveToGif方法并新增SaveToWebp方法,更新依赖项以支持新功能。

This commit is contained in:
lixiangwuxian
2025-05-14 00:01:40 +08:00
parent c482f721b1
commit abcab9dfc7
5 changed files with 50 additions and 3 deletions

View File

@@ -1,6 +1,7 @@
package sprite
import (
"errors"
"image"
"image/color/palette"
"image/draw"
@@ -9,6 +10,8 @@ import (
"log"
"os"
"sort"
"github.com/HugoSmits86/nativewebp"
)
// 设置为true启用调试日志
@@ -864,7 +867,7 @@ func (b *NamedSpriteBoard) SaveToPng(filename string) error {
return nil
}
func (b *NamedSpriteBoard) SaveToGIF(filename string) error {
func (b *NamedSpriteBoard) SaveToGif(filename string) error {
// 获取动画帧
frames, delays := b.RenderToAnimatedImage()
if len(frames) == 0 {
@@ -921,3 +924,38 @@ func (b *NamedSpriteBoard) SaveToGIF(filename string) error {
return nil
}
func (b *NamedSpriteBoard) SaveToWebp(filename string) error {
frames, delays := b.RenderToAnimatedImage()
if len(frames) == 0 {
return errors.New("no frames to save")
}
images := make([]image.Image, len(frames))
for i, frame := range frames {
images[i] = frame
}
durations := make([]uint, len(delays))
for i, delay := range delays {
durations[i] = uint(delay)
}
disposals := make([]uint, len(delays))
for i := range disposals {
disposals[i] = 0
}
ani := nativewebp.Animation{
Images: images,
Durations: durations,
Disposals: disposals,
LoopCount: 0,
BackgroundColor: 0xffffffff,
}
f, err := os.Create(filename)
if err != nil {
return err
}
defer f.Close()
if err := nativewebp.EncodeAll(f, &ani, &nativewebp.Options{}); err != nil {
return err
}
return nil
}