編集: 最初の情報検索の問題は、gif と「アニメーション gif」を区別していなかったことです。したがって、この質問に対処するための SO に関するリソースはたくさんあります。リソース: リンク 3
明らかに、PIL 自体は、アニメーション GIF を処理するには不十分です。
gif フレームを jpg に変換しようとしています。一部の gif (主に白黒) ではこれでうまくいきますが、他の (主にカラー) ではあまりうまくいきません。SOに関するいくつかの投稿を見て、試してみましたが、役に立ちませんでした。特に私は試してみました:Link1、Link2。
パフォーマンスは軽度の考慮事項ですが、今のところ、実用的なソリューションが欲しい. 一貫したパターンは、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