feat: 添加WebP支持,更新SaveToGif方法并新增SaveToWebp方法,更新依赖项以支持新功能。
This commit is contained in:
@@ -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
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user