Я работаю над сценарием, который просматривает несколько каталогов, находит все картинки в этом каталоге, разбивает их на отдельные изображения кадров png и затем записывает их в каталог.
Фактическое разбиение работает просто отлично, однако все кадры, кроме первого, испорчены. Основываясь на своих исследованиях, я понимаю, что некоторые GIF-файлы вместо того, чтобы хранить все отдельные кадры, сохраняют только то, что меняется между кадрами, я предполагаю, что это один из тех случаев, основанных на результатах, которые я получаю.
Вот код, который я использую:
from PIL import Image
from os import listdir
import os
from os.path import isfile, join
characterDirs = ["01_mario"]
print(characterDirs)
#Loop through characterDirs
for char in characterDirs:
#save each gif into a directory for easy access
moves = [f for f in listdir("./media/gifs/" + char)]
#Make a directory for that character
os.mkdir("./media/frames/" + char)
#Loop through all moves in the array
for move in moves:
print(move)
i=0
#Open the gif
gif = Image.open("./media/gifs/" + char + "/" + move)
#Make a directory for the move
os.mkdir("./media/frames/" + char + "/" + move[0:-4])
#Keep going until there are no remaining frames of the gif
while True:
try:
#Save the frame
gif.save("./media/frames/" + char + "/" + move[0:-4] + "/" + str(i+1) + ".png")
#Increment to next frame
gif.seek(gif.tell()+1)
i +=1
except EOFError:
break
Вот несколько кадров, которые я получаю:
https://ultimate-hitboxes.s3.amazonaws.com/stackoverflow/10.png
(Вы можете изменить 10 в URL-адресе для любого числа от 1 до 33, чтобы получить каждый разбитый кадр)
Вот полный рисунок:
https://ultimate-hitboxes.s3.amazonaws.com/stackoverflow/MarioBAir.gif
Заранее спасибо!