Muy bien, tengo un código que toma la entrada del usuario, obtiene el gif correspondiente de cada letra (una letra danzante) y los une para formar una palabra. Algo así como una fuente animada, básicamente.
Mi problema es que con PIL, ocasionalmente llena el fondo de una de las letras de alrededor de 1 cuadro con un color rojo, como se demuestra aquí:

Este es mi código que genera esto.
import sys from PIL import Image from PIL import GifImagePlugin from io import BytesIO def text(str, procid): t = [] for c in str: t.append('letters/' + c + '.gif') images = [Image.open(x) for x in t] widths, heights = zip(*(i.size for i in images)) total_width = sum(widths) max_height = max(heights) x_offset = 0 imgs = [] for frame in range(0, images[0].n_frames): new = Image.new('RGBA', (total_width, max_height)) x_offset = 0 for im in images: im.seek(frame) new.paste(im, (x_offset,0)) x_offset += im.size[0] imgs.append(new) img_io = BytesIO() new.save(img_io, 'GIF', transparency=0, save_all=True, append_images=imgs, loop=0, disposal=2,duration=1,optimize=True) img_io.seek(0) return img_io¿Alguna idea de por qué hace esto y es posible solucionarlo?
Editar: he adjuntado los GIFS de entrada utilizados para crear la "PRUEBA" animada
e.gif https://i.stack.imgur.com/PQfMK.gif
s.gif https://i.stack.imgur.com/7PQp5.gif
t.gif https://i.stack.imgur.com/DMLrg.gif
Edición 2: todas las letras tienen la misma cantidad de marcos, y el fondo rojo no está presente en ninguna parte de S.gif, lo que significa que tiene que ser un problema de PIL o un problema con mi código.
Pude arreglarlo descargando un conjunto diferente de las mismas letras danzantes de una fuente algo más confiable. (Los anteriores fueron subidos a tenor por lo que podría haber sido modificado en algunas formas)
para mí hay más en juego,
marque uno de los marcos s.gif:
y, sin embargo, mi gif de salida usando su código se ve así: