es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Por qué este bucle for tiene un contador i que salta de 1 a 10 al añadir imágenes en Python? Relacionado con PIL.

Tengo las siguientes imágenes en una ruta específica:

0.png
1.png
2.png
3.png
4.png
5.png
6.png
7.png
8.png
9.png
10.png
11.png
12.png
13.png
14.png
15.png
16.png
17.png
18.png
19.png
20.png
21.png
22.png
23.png
24.png
25.png
26.png

Y quiero usar el siguiente programa (que se encuentra en la misma ruta específica que las imágenes) para convertir esas imágenes en un solo archivo gif.

from PIL import Image
import glob

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

# Guarda en un archivo GIF que se repite infinitamente
frames[0].save('png_to_gif.gif', format='GIF',
               append_images=frames[1:],
               save_all=True,
               duration=160, loop=0)

Después de ejecutar el programa anterior, obtuve esta salida:

0.png
1.png
10.png
11.png
12.png
13.png
14.png
15.png
16.png
17.png
18.png
19.png
2.png
20.png
21.png
22.png
23.png
24.png
25.png
26.png
3.png
4.png
5.png
6.png
7.png
8.png
9.png

¿Cómo puedo asegurarme de que el programa apende las imágenes en el mismo orden en que fueron nombradas?

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para asegurarse de que el programa añadirá las imágenes en el mismo orden en el que fueron nombradas, puede ordenar la lista imgs antes del bucle for utilizando la función incorporada sorted():

    imgs = sorted(glob.glob("*.png"))
    

    Esto ordenará la lista de nombres de archivo en orden ascendente por defecto, lo cual debería coincidir con el orden en el que nombró los archivos. Luego, cuando el bucle for añada los fotogramas a la lista frames, estarán en el orden correcto.

Comments are closed.