#python #python-imaging-library #gif
#python #python-imaging-library #gif
Вопрос:
Я работаю с библиотекой Pillow. У меня есть один gif, на который я должен вставить другое изображение. При зацикливании на каждом кадре gif и вставке в него изображения gif искажается.
Кто-нибудь, пожалуйста, предложите правильное решение для этого.
Спасибо.
1. GIF
2. Изображение
3. Код
from PIL import Image
from io import BytesIO
animated_gif = './img/gif_distort.gif'
transparent_foreground = './img/cat.jpeg'
img = Image.open(animated_gif)
image = Image.open(transparent_foreground)
duration = []
frames = []
for i in range(img.n_frames):
img.seek(i)
frame = img.convert('RGBA').copy()
duration.append(img.info['duration'])
frame.paste(image)
frames.append(frame)
# save gif in temp file
temp_gif_path = 'img/output.gif'
frames[0].save(temp_gif_path, format='GIF', save_all=True, append_images=frames[1:], duration=duration, optimise=True)
Результат
Комментарии:
1. Похоже, это ошибка в Pillow. Если вы вызываете
getpalette()
каждый кадр, кажется, предполагается, что палитра одинакова для всех кадров, тогда как изображение на самом деле имеет разную палитру для каждого кадра.2. Я отправил проблему на Github github.com/python-pillow/Pillow/issues/4977
3. Я создал запрос на извлечение, чтобы исправить это — github.com/python-pillow/Pillow/pull/5857
4. Эта проблема будет решена с версии Pillow 9.0.0, выпущенной 1 января.