2017-01-11 19 views
2

私はGIF画像に関連するプロジェクトに取り組んでいます.Goでいくつかの基本的な操作を行っています(フレームの取得や画像からGIFを作成するなど)。しかし、今はGIFをデコードしてからもう一度エンコードしようとしている簡単な例を考えてみましょう。私は"image/gif"パッケージを使用しようとしましたが、私はそれが私が欲しいことをすることができません。ここ
はコードです: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を保存/読み込む方法ではありませんか?どのような間違いをするのですか?

EDIT:破損したことで 私はここにscrenshot occurs-それにエラーを開こうとすることを意味:http://www.filedropper.com/obrazekpociety

GIF: http://vader.joemonster.org/upload/rwu/1539970c1d48acceLw7m.gif

囲碁バージョン1.7.4

+0

あなたが「壊れた」とはどういう意味ですか?どのGoのバージョンを使用していますか?動作しないファイルのサンプルを提供できますか? – JimB

+0

私は質問を編集しました –

+1

これはあなたが使用している_exact_コードと画像であることは確かですか?あなたが提供した画像は、3.4ではなく9.2MBです。これはgo1.7とgo1.8で正しく動作するはずです。 (サイドノート、常にCloseを延期する前にエラーをチェックするか、パニックを得ることができます) – JimB

答えて

0

問題は、あなたがio.ReaderインターフェイスをサポートしていFile*DecodeAllにではなく、何かを渡しています。

それはファイルから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 
} 
+1

これによると:http://stackoverflow.com/questions/25677235/golang-create-a-io-reader-from-a-local-file os.Open returnsとio.Reader。 (そうでなければ、私は思うにコンパイルできないでしょうか?)さらに、私はあなたのバージョンにコードを変更しました。そしてそれはまだ壊れたgifを生成します。しかし、助けてくれてありがとう! –

+0

乾杯。あなたは正しいかもしれない。私は自分のPC上に持っていたgifを試してみました。有効なgifを読み込んで書きました。しかし、私は後ろ向きの誤りであったあなたのオリジナルのコードをテストしなかった。しかし、それはあなたのコードの外で、破損したオリジナルのGifのようなものがあるかどうか疑問に思っています。 – miltonb

+0

私もそれについて考えましたが、いくつかのGIFを試しましたが、それらのすべてが壊れた結果をもたらしました。 –