feat: 添加WebP支持,更新SaveToGif方法并新增SaveToWebp方法,更新依赖项以支持新功能。
This commit is contained in:
parent
c482f721b1
commit
abcab9dfc7
2
.gitignore
vendored
2
.gitignore
vendored
@ -1,4 +1,4 @@
|
||||
test.png
|
||||
.vscode/launch.json
|
||||
imagedd
|
||||
test.gif
|
||||
test.*
|
||||
|
2
go.mod
2
go.mod
@ -13,6 +13,8 @@ require (
|
||||
)
|
||||
|
||||
require (
|
||||
github.com/HugoSmits86/nativewebp v1.2.0 // indirect
|
||||
github.com/kettek/apng v0.0.0-20220823221153-ff692776a607 // indirect
|
||||
golang.org/x/net v0.0.0-20211118161319-6a13c67c3ce4 // indirect
|
||||
golang.org/x/text v0.25.0 // indirect
|
||||
)
|
||||
|
4
go.sum
4
go.sum
@ -1,5 +1,9 @@
|
||||
github.com/HugoSmits86/nativewebp v1.2.0 h1:XJtXeTg7FsOi9VB1elQYZy3n6VjYLqofSr3gGRLUOp4=
|
||||
github.com/HugoSmits86/nativewebp v1.2.0/go.mod h1:YNQuWenlVmSUUASVNhTDwf4d7FwYQGbGhklC8p72Vr8=
|
||||
github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0 h1:DACJavvAHhabrF08vX0COfcOBJRhZ8lUbR+ZWIs0Y5g=
|
||||
github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0/go.mod h1:E/TSTwGwJL78qG/PmXZO1EjYhfJinVAhrmmHX6Z8B9k=
|
||||
github.com/kettek/apng v0.0.0-20220823221153-ff692776a607 h1:8tP9cdXzcGX2AvweVVG/lxbI7BSjWbNNUustwJ9dQVA=
|
||||
github.com/kettek/apng v0.0.0-20220823221153-ff692776a607/go.mod h1:x78/VRQYKuCftMWS0uK5e+F5RJ7S4gSlESRWI0Prl6Q=
|
||||
github.com/srwiley/oksvg v0.0.0-20221011165216-be6e8873101c h1:km8GpoQut05eY3GiYWEedbTT0qnSxrCjsVbb7yKY1KE=
|
||||
github.com/srwiley/oksvg v0.0.0-20221011165216-be6e8873101c/go.mod h1:cNQ3dwVJtS5Hmnjxy6AgTPd0Inb3pW05ftPSX7NZO7Q=
|
||||
github.com/srwiley/rasterx v0.0.0-20220730225603-2ab79fcdd4ef h1:Ch6Q+AZUxDBCVqdkI8FSpFyZDtCVBc2VmejdNrm5rRQ=
|
||||
|
5
main.go
5
main.go
@ -146,7 +146,10 @@ func main() {
|
||||
board.AddSprite(gifSprite)
|
||||
}
|
||||
board.SaveToPng("test.png")
|
||||
if err := board.SaveToGIF("test.gif"); err != nil {
|
||||
if err := board.SaveToGif("test.gif"); err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
if err := board.SaveToWebp("test.webp"); err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
}
|
||||
|
@ -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
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user