Создание GIF с использованием PIL / Pillow - PullRequest
1 голос
/ 06 марта 2020

Я пытаюсь использовать PIL / Pillow, чтобы преобразовать несколько файлов .png в рисунок. Следующий скрипт работает, но добавляет кадры в случайном порядке.

from PIL import Image
import glob

# Create frames
frames = []
imgs = glob.glob("*.png")
for i in imgs:
    new_frame = Image.open(i)
    frames.append(new_frame)

# Save into a GIF file that loops forever
frames[0].save('globe.gif', format='GIF', 
               append_images=frames[0:], save_all=True, duration=1000, 
               loop=0, optimize=False, transparency=0)

Я попытался переименовать файлы по порядку (1.png, 2.png, 3.png et c), но это не сработало

Есть идеи?

1 Ответ

0 голосов
/ 06 марта 2020

Если вы переименовали свои файлы, начиная с цифр, вы можете попробовать отсортировать список imgs. Возможно, вам придется использовать естественный порядок, в зависимости от того, как вы назвали свои файлы.

На основании этого ответа :

import re

def natural_sort(l): 
    convert = lambda text: int(text) if text.isdigit() else text.lower() 
    alphanum_key = lambda key: [ convert(c) for c in re.split('([0-9]+)', key) ] 
    return sorted(l, key = alphanum_key)

И в вашем коде:

# Create frames
frames = []
imgs = glob.glob("*.png")
imgs = natural_sort(imgs)
for i in imgs:
    new_frame = Image.open(i)
    frames.append(new_frame)
...