Varinha cria quadro vazio e taxa de quadros irregular
Eu tenho abaixo o trecho que cria um gif. Este trecho é derivado de dicasaqui. O snippet cria um quadro vazio e os quadros têm um atraso irregular entre eles. Observe o atraso entre o nada e o primeiro quadro e, em seguida, o segundo quadro aparece rapidamente. Por que isso acontece?
Eu tive que criar uma imagem de tamanho específico antes da mão porque, a varinha não está redimensionando a tela de acordo com a sequência de tamanho máximo. Eu tenho que encontrar uma maneira de resolver isso também.
def render(self):
# map anim gif
wand = Image2(width=205,height=223)
#create frames
for each_frame in self._tree_dot_frames:
img = Image2(blob=each_frame)
print('Image width: {} height: {}'.format(img.width,img.height))
wand.sequence.append(img)
#set frame rate
for cursor in range(len(self._tree_dot_frames)):
with wand.sequence[cursor] as frame:
print('sequence width: {} height: {}'.format(frame.width,frame.height))
frame.delay = 100
#wand.merge_layers('merge')
wand.format = 'gif'
wand.save(filename='animated.gif')
print('No of frames: {} gif width: {} height: {}'.format(len(wand.sequence),wand.width,wand.height))
self._tree_dot_blob = wand.make_blob()
return self._tree_dot_blob
Resultado:
Largura da imagem: 175 altura: 136
Largura da imagem: 205 altura: 223
largura de sequência: 205 altura: 223
largura de sequência: 175 altura: 136
Número de quadros: 3 gif largura: 205 altura: 223
PS: Tenho outro problema com um snippet semelhanteaqui, para não ser confundido com esse problema.
Atualização 1:
Abaixo está a saída se eu criar um objeto de varinha sem tamanho predefinido. A animação parece boa, mas a tela é de primeira sequência (que é menor), então o gif final é cortado, agora mostrando a segunda sequência completamente.
#wand = Image2(width=205,height=223)
wand = Image2()
Atualização 2:
Abaixo está a saída se, com a alteração acima, eu também alimentar a sequência no sentido inverso, para que agora a varinha tenha o tamanho da 1ª sequência. Agora o tamanho final do gif está bom, mas como você pode ver, o quadro maior está sempre em segundo plano, o que agora é o novo problema.
#create frames
for each_frame in reversed(self._tree_dot_frames):
img = Image2(blob=each_frame)
print('Image width: {} height: {}'.format(img.width,img.height))
wand.sequence.append(img)
Por favor, ajude como eu estou ficando preso se for em qualquer uma das direções acima.
Solução desejada seria aquele que leva o tamanho máximo de quadros alimentados e acomoda todos os quadros nesse tamanho / algo como abaixo deve fazer (eu mostrei apenas os dados dos primeiros 2 quadros no problema acima)