我将处理一个与GIF图像相关的项目,我尝试在Go中对它们进行一些基本操作(例如检索帧或从一堆图像创建GIF)。但是现在让我们做一个简单的例子,其中我只是尝试解码GIF然后再次编码。我尝试使用"image/gif"
包,但我无法让它做我想做的事
这是代码:
package main
import (
"os"
"image/gif"
)
func main() {
inputFile , err := os.Open("travolta.gif")
defer inputFile.Close()
if err != nil {
panic(err)
}
g, err := gif.DecodeAll(inputFile)
if err != nil {
panic(err)
}
outputFile, err := os.OpenFile("travolta2.gif", os.O_WRONLY|os.O_CREATE, 0777)
defer outputFile.Close()
if err != nil {
panic(err)
}
err = gif.EncodeAll(outputFile, g)
if err != nil {
panic(err)
}
}
当我运行代码时,它不会出现恐慌,确实会创建另一个gif。不幸的是它已经腐败了。此外,GIF的大小从3,4MB变为4.4MB。这不是保存/读取gif的方法吗?我犯了什么错误?
修改 损坏我的意思是当我试图打开它时发生错误 - screnshot here:http://www.filedropper.com/obrazekpociety。
GIF: http://vader.joemonster.org/upload/rwu/1539970c1d48acceLw7m.gif
转到版本1.7.4
答案 0 :(得分:0)
问题是您将File*
传递给DecodeAll
而不是支持io.Reader
界面的内容。
我修改了您的代码,以便从文件中创建bufio.Reader
,然后将其移至DecodeAll
,如下所示:
import (
"bufio"
"os"
"image/gif"
)
func main() {
inputFile , err := os.Open("travolta.gif")
defer inputFile.Close()
if err != nil {
panic(err)
}
r := bufio.NewReader(inputFile)
g, err := gif.DecodeAll(r)
if err != nil {
panic(err)
}
// ... remaining code
}