PIL - Convertir les images GIF en JPG

J'ai essayé de convertir un gif pour les images avec Python Image de la Bibliothèque,
mais il en résulte bizarre cadres

L'Entrée gif est:

Source de l'Image http://longcat.de/gif_example.gif

Dans mon premier essai, j'ai essayé de convertir l'image avec l'Image.un
Image RVB, avec 255,255,255 comme fond blanc, comme dans toutes les autres
exemple que j'ai trouvé sur internet:

def processImage( infile ):

    try:
        im = Image.open( infile )
    except IOError:
        print "Cant load", infile
        sys.exit(1)

    i = 0

    try:
        while 1:

            background = Image.new("RGB", im.size, (255, 255, 255))
            background.paste(im)
            background.save('foo'+str(i)+'.jpg', 'JPEG', quality=80)

            i += 1
            im.seek( im.tell() + 1 )

    except EOFError:
        pass # end of sequence

mais il en résulte bizarre fichiers de sortie:

Exemple #1 http://longcat.de/gif_example1.jpg

Mon deuxième essai a été, pour convertir le gif dans un RGBA abord, et ensuite utiliser
son masque de transparence, de rendre transparents les morceaux de blanc:

def processImage( infile ):

    try:
        im = Image.open( infile )
    except IOError:
        print "Cant load", infile
        sys.exit(1)

    i = 0

    try:
        while 1:

            im2 = im.convert('RGBA')
            im2.load()

            background = Image.new("RGB", im2.size, (255, 255, 255))
            background.paste(im2, mask = im2.split()[3] )
            background.save('foo'+str(i)+'.jpg', 'JPEG', quality=80)

            i += 1
            im.seek( im.tell() + 1 )

    except EOFError:
        pass # end of sequence

qui entraîne une sortie comme celle-ci:

Exemple #2 http://longcat.de/gif_example2.jpg

L'avantage sur le premier essai était, que la première image semble assez bon
Mais comme vous pouvez le voir, le reste est cassé

Que devrais-je essayer?

Edit:

Je crois que j'ai beaucoup plus proche de la solution

Exemple #3 http://longcat.de/gif_example3.png

J'ai dû utiliser la palette de la première image pour les autres images,
et de le fusionner avec l'image précédente (pour les animations gif qui utilisent
diff-images)

def processImage( infile ):

    try:
        im = Image.open( infile )
    except IOError:
        print "Cant load", infile
        sys.exit(1)

    i = 0

    size        = im.size
    lastframe   = im.convert('RGBA')
    mypalette   = im.getpalette()

    try:
        while 1:

            im2 = im.copy()
            im2.putpalette( mypalette )

            background = Image.new("RGB", size, (255,255,255))

            background.paste( lastframe )
            background.paste( im2 )
            background.save('foo'+str(i)+'.png', 'PNG', quality=80)

            lastframe = background

            i += 1
            im.seek( im.tell() + 1 )

    except EOFError:
        pass # end of sequence

Mais en fait je ne sais pas, pourquoi mon transparence est noir au lieu de blanc
Même si je modifie la palette (modifier la transparence de canal à blanc)
ou utilisez le masque de transparence, le fond est toujours noir

source d'informationauteur Schinken