1 回答
TA贡献1836条经验 获得超3个赞
正如评论中所暗示的,您只使用一帧:
func Decode(r io.Reader) (image.Image, error)Decode 从 r 读取 GIF 图像并将第一个嵌入图像作为 image.Image 返回。
但是你需要
func DecodeAll(r io.Reader) (*GIF, error) DecodeAll 从 r 读取 GIF 图像并返回顺序帧和时序信息。
和
func EncodeAll(w io.Writer, g *GIF) error EncodeAll 将 g 中的图像以 GIF 格式写入 w,并具有给定的循环计数和帧之间的延迟。
详情请看这篇文章。
这是一个将图像减慢到每帧 0.5 秒的示例:
package main
import (
"image/gif"
"os"
)
func main() {
logo, err := os.Open("yay.gif")
if err != nil {
panic(err)
}
defer logo.Close()
inGif, err := gif.DecodeAll(logo)
if err != nil {
panic(err)
}
outGif, err := os.Create("done.gif")
if err != nil {
panic(err)
}
defer outGif.Close()
for i := range inGif.Delay {
inGif.Delay[i] = 50
}
if err := gif.EncodeAll(outGif, inGif); err != nil {
panic(err)
}
}
结果:
边注
即使在我的浏览器(Firefox)中我看到输出图像动画,并且我可以看到 GIMP 中的帧,我也无法在我的桌面查看器(gifview、comix)上看到它动画。我不知道(尚)这是什么原因。
- 1 回答
- 0 关注
- 144 浏览
添加回答
举报