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 關注
- 172 瀏覽
添加回答
舉報