gif creator con python

Dopo l’articolo su come installare ,creare ed esportare un applicazione ,voglio mostrare quante semplice creare un applicazione gif creator con python (gratuita ed open source) . Nota : un immagine gif in genere va aperta con un browser chrome ,firefox, internet explorer ecc.

Visto che ce molto da imparare sul codice di programmazione, dico perché non imparare cerando anche qualcosa che sia semplice e anche un po utile per tutti.

Per creare l’applicazione che sia magari comprensibile per tutti (intendo dire che non sia solo codice ma anche con un schermata grafica ) il minimo che serve a python sono 4 librerie, tkinter , imageio , os e PIL.

tkinter” ti permette di creare l’interfaccia grafica (ovvero la finestra con il menu , pulsanti, caselle ecc.)

imageio” fa la conversione delle immagini in un immagine di movimento gif.

os” in parole povere serve per esplorare le cartelle di windows.

PIL” in questo caso servirà per impostare la dimensione larghezza/lunghezza del immagine

Per le persone che sono proprio ai primi passi ,un altra cosa che serve è un “text editor”. Se come “text editor” usate il blocco note di Windows va bene ma non e molto pratico 🙂 . Esistono sul web molte applicazioni gratuite ,personalmente io mi trovo bene con “Notepad ++” questo è il link dove lo potete scaricare .

Inizio a scrivere du righe sul Notepad (text editor) . (Nota: anche se non ci capisci niente prosegui lo stesso , considera che è un esercizio creato apposta per farti capire il codice di python)


from tkinter import *

finestra = Tk()
finestra.mainloop()

Descrivo un po’ il codice qui di sopra . In pratica con queste 3 righe si crea la finestra dell’applicazione.

from tkinter import *” Diciamo a python di importare tutte le funzioni al interno della libreria “tkinter”

finestra = Tk()” : Tk() è una delle funzioni di “tkinter” che permette di creare la finestra (l’ho chiamata finestra ma le posso dare qualsiasi altro nome )

finestra.mainloop()” : mainloop() chiude tutto sarà sempre l’ultima riga della finestra , tutto il resto del codice dovrà essere al di sopra di questa riga

Per testarlo basta salvare il testo con un estensione “.py” . Nel mio caso salvo con il nome “App.py“.

Nel mio caso ,siccome ho installato la versione più recente di python (3.11), per testare il codice appena creato mi basta cliccare due volte sul file “App.py” .Un metodo alternativo è tramite CMD

Vado avanti aggiungendo alla mia applicazione un pulsante :

pulsante =Button(finestra,text="Genera gif")
pulsante.grid(row=0, column=0) 

Button() e un’altra funzione di tkinter che crea un pulsante . Button(finestra)- finestra è il nome che ho usato per creare la finestra nello script di sopra . text=”Genera gif” – “Genera gif” sarà il testo che vedrò sopra il pulsante. pulsante =Button – assegno un nome a questo pulsante

pulsante.grid(row=0, column=0)– Si chiama la tecnica della griglia in questo caso ho definito la posizione del pulsante riga 0 ,colona 0 (nota che su python i numeri partono da 0 (zero è la prima riga/colona ) )

Non resta che incollare queste righe e provare se funziona :

from tkinter import *

finestra = Tk()
finestra.title("Gif creator. Blog di Genti")

pulsante =Button(finestra,text="Genera gif")
pulsante.grid(row=0, column=0) 

finestra.mainloop()

Salvare ed eseguire App.py:

Vado avanti aggiungendo il minimo indispensabile per creare una gif creator con python. Penso che a questo script mancano solo 2 caselle …una per indicare i secondi (ovvero ogni quanti secondi le immagini devono cambiare) . La seconda per il nome che voglio dare per salvare la gif. Il codice per creare le caselle :

casella = Entry(finestra, width=5)
casella.grid(row=0, column=1)
casella = Entry(finestra, width=15)
casella.grid(row=0, column=2)

Entry()– è una funzione di tkinter che definisce una casella. Nota come sul pulsante assegno la casella alla finestra . width=5 – larga di 5 caratteri. Con il metodo della griglia “grid(row=0, column=1)” decido la sua posizione riga 0 colona 1 (nota che su riga 0 colona 0 ho messo il pulsante) . Python esegue il codice in sequenza perciò ho fatto un copia incola per creare la seconda casella e ho modificato i parametri

Aggiungo le caselle al codice di sopra e provo a lanciare “App.py”.

from tkinter import *

finestra = Tk()
finestra.title("Gif creator. Blog di Genti")

pulsante =Button(finestra,text="Genera gif")
pulsante.grid(row=0, column=0) 

casella = Entry(finestra, width=5)
casella.grid(row=0, column=1)
casella = Entry(finestra, width=15)
casella.grid(row=0, column=2)

finestra.mainloop()

Ci siamo quasi ..(non e vero ..)

L’idea è semplice … mettere l’applicazione nella stessa cartella dove sono presenti le immagini da convertire in gif , al resto ci penserà l’applicazione . Inizio a inserire altre funzioni:

nome_gif=StringVar()
tempo_gif=StringVar()
nome_gif.set("Inserisci nome")
tempo_gif.set("sec")

StringVar() – una funzione di tkinter per creare un valore variabile di testo . Diciamo che andranno a integrarsi alle 2 caselle per memorizzare quello che noi andremo a scrivere .

nome_gif.set(“Inserisci nome”)– preimpostato il valore con la frase “Inserisci nome ” .Il codice si trasforma in questo modo :

from tkinter import *

finestra = Tk()
finestra.title("Gif creator. Blog di Genti")

pulsante =Button(finestra,text="Genera gif")
pulsante.grid(row=0, column=0) 

nome_gif=StringVar()
tempo_gif=StringVar()
nome_gif.set("Inserisci nome")
tempo_gif.set("sec")

casella = Entry(finestra,textvariable=tempo_gif, width=5)
casella.grid(row=0, column=1,)
casella = Entry(finestra, textvariable=nome_gif,width=15)
casella.grid(row=0, column=2,)

finestra.mainloop()

Doppio click su “App.py” oppure lanciarla tramite CMD.

Rimane da sistemare il pulsante. Diciamo che devo dire al pulsante cosa fare quando ci vado a cliccare sopra . Ma prima di tutto ce da assicurarsi che la libreria “imageio” sia già installata su python. Semplice aprire CMD e scrivere “python” dopo di che “import imageio” se la risposta di python è un errore vuol dire che la libreria non e presente . Per installare la libreria sul computer riavviare la finestra CMD assicurarsi di avere la connessione internet e scrivere: “python -m pip install imageio” vedere l’immagine di sotto :

Aggiungo al codice il resto mancante per completare il puzzle . Ovvero le librerie mancanti e la funzione che andrà associata al pulsante .

import os
from PIL import Image
import imageio

def genera_gif():
  y=str(nome_gif.get())
  x=float(tempo_gif.get())
  filenames= os.listdir("img")
  images = []
  for filename in filenames:
    path="img\%s"%filename
    ima=imageio.imread(path)
    ima=Image.fromarray(ima)
    images.append(ima.resize(size=(400, 300)))
  imageio.mimsave(('%s.gif'%y), images,fps=x)  

Descrizione

Attenzione agli spazi uno in più oppure uno in meno fa si che il programma non funziona. Le librerie “os” e “imageio” le ho spiegato al inizio del articolo . la funzione “def genera_gif():” e la ciliegina sulla torta descrivo un po’ a parole povere il suo contenuto . y=str(tempo_gif.get()) e x=float(nome_gif.get()) catturano il nome ed il valore che andremo a scrivere nelle caselle lo associano a y e x . filenames= os.listdir(“img”) cattura il nome di tutte le immagini che saranno presenti nella cartella denominata “img”. images = [] crea una lista virtuale vuota dove saranno inseriti i dati delle immagini catturate. for filename in filenames: insieme al suo contenuto elabora ed inserisce i datti sulla lista “images” .

Da notare images.append(ima.resize(size=(400, 300)))– qui si imposta a piacere la dimensione del immagine in questo caso ho messo 400 larghezza x 300 lunghezza. Ultima riga imageio.mimsave((‘%s.gif’%y), images,fps=x) qui entra in funzione la libreria imageio e converte le immagini in gif . Il codice si evolve come segue :

Codice finale

from tkinter import *
import os
from PIL import Image
import imageio 

finestra = Tk()
finestra.title("Gif creator. Blog di Genti")

nome_gif=StringVar()
tempo_gif=StringVar()
nome_gif.set("Inserisci nome")
tempo_gif.set("sec")

casella = Entry(finestra,textvariable=tempo_gif, width=5)
casella.grid(row=0, column=1,)
casella = Entry(finestra, textvariable=nome_gif,width=15)
casella.grid(row=0, column=2,)

def genera_gif():
  y=str(nome_gif.get())
  x=float(tempo_gif.get())
  filenames= os.listdir("img")
  images = []
  for filename in filenames:
    path="img\%s"%filename
    ima=imageio.imread(path)
    ima=Image.fromarray(ima)
    images.append(ima.resize(size=(400, 300)))
  imageio.mimsave(('%s.gif'%y), images,fps=x) 

pulsante =Button(finestra,text="Genera gif",command=genera_gif)
pulsante.grid(row=0, column=0) 

finestra.mainloop()

Questo è il codice finale (il minimo ) per creare un gif creator con python. Non resta che provarlo .Nel mio caso ho messo 3 immagini (ma si possono mettere anche di più) sulla cartella denominata “img“. Imposto

i valori sulla casella “sec” metto 2(significa 2 frame per secondo) e l’altra cartella do il nome “Genti”. Nota la gif in genere va aperta con un browser : internet explorer , chrome, firefox ecc. Vedere immagini sotto:

gif creator con python

Grazie al articolo precedente potete convertire questa applicazione in exe ,metterla in una chiavetta e portarla ovunque .