1

編集: 最初の情報検索の問題は、gif と「アニメーション gif」を区別していなかったことです。したがって、この質問に対処するための SO に関するリソースはたくさんあります。リソース: リンク 3

明らかに、PIL 自体は、アニメーション GIF を処理するには不十分です。

gif フレームを jpg に変換しようとしています。一部の gif (主に白黒) ではこれでうまくいきますが、他の (主にカラー) ではあまりうまくいきません。SOに関するいくつかの投稿を見て、試してみましたが、役に立ちませんでした。特に私は試してみました:Link1Link2

パフォーマンスは軽度の考慮事項ですが、今のところ、実用的なソリューションが欲しい. 一貫したパターンは、GIF の最初の画像が常に完璧になるということです。興味深いことに、Zamzarも試してみましたが、同じノイズ データが生成されます。私はいくつかの調査を行っていましたが、これは LZW 圧縮アルゴリズムの問​​題である可能性があるようですが、SO では、PIL が LZW 解凍を処理することを示唆する投稿を見てきました。一方、LZW 解凍は賛成だと聞いたことがあります。

PNGへの変換も試みましたが、そこでも成功しなかったことに注意してください。画像の上に白い点が重ねられているのでしょうか?

このエラーを生成するサンプル gifを次に示します。

編集: images2gif.pyに出会いました。この問題が解決した場合は、この投稿を更新します。

私が使用しているコードは次のとおりです。

from PIL import Image
import sys
import os

def processImage(infile):
    try:
        im = Image.open(infile)
    except IOError:
        print "Cant load", infile
        sys.exit(1)
    i = 0
    mypalette = im.getpalette()

    try:
        while 1:
            im.putpalette(mypalette)
            new_im = Image.new("RGB", im.size)

            #new_im = Image.new("RGB", im.size)
            new_im.paste(im)
            new_im.save('foo'+str(i)+'.png')
            #if(os.stat('foo' + str(i)+'.png')):
                # os.remove('foo' + str(i) + '.jpg')
             i += 1
             mypalette = im.getpalette()
             im.seek(im.tell() + 1)

     except EOFError:
         pass # end of sequence
4

0 に答える 0