Interfaccia Grafica per Generare Immagini da Testo con Python e Tkinter

Python è uno dei linguaggi di programmazione più versatili e popolari al mondo, grazie alla sua semplicità e alla vasta gamma di librerie disponibili. Una delle aree in cui Python eccelle è la creazione di interfacce grafiche (GUI) per applicazioni desktop. In questo articolo, esploreremo come utilizzare la libreria Tkinter per creare un’interfaccia utente che permetta di generare immagini a partire da un testo inserito dall’utente.

L’applicazione che andremo a costruire sarà un generatore di immagini che prende in input un testo, un nome file, un formato (PNG, JPG, GIF) e le dimensioni dell’immagine, per poi generare e salvare un’immagine con il testo centrato. Questo tipo di strumento può essere utile in molte situazioni, come la creazione di banner, immagini per social media, o semplicemente per convertire rapidamente del testo in un formato visivo.

Introduzione a Tkinter e Pillow

Tkinter è la libreria standard di Python per la creazione di interfacce grafiche. È inclusa di default in Python, quindi non è necessario installarla separatamente. Tkinter permette di creare finestre, pulsanti, campi di input e altri elementi dell’interfaccia utente in modo semplice e intuitivo.

Pillow (PIL) è invece una libreria di imaging che permette di manipolare immagini, creare nuove immagini, e salvarle in vari formati. Pillow non è inclusa di default in Python, ma può essere facilmente installata tramite pip:

pip install pillow

Creazione dell’Interfaccia Grafica

Il primo passo per creare la nostra applicazione è progettare l’interfaccia grafica. Utilizzeremo Tkinter per creare una finestra con diversi campi di input:

  • Testo: Il testo che l’utente desidera convertire in immagine.
  • Nome file: Il nome del file di output (senza estensione).
  • Formato: Un menu a tendina per selezionare il formato dell’immagine (PNG, JPG, GIF).
  • Larghezza e Altezza: Le dimensioni dell’immagine.

Ecco come appare il codice per creare l’interfaccia:

from tkinter import Tk, Label, Entry, Button, messagebox, StringVar, OptionMenu from PIL import Image, ImageDraw, ImageFont import textwrap def genera_immagine_da_testo(): # Recupera i valori inseriti dall'utente testo = entry_testo.get() nome_file = entry_nome.get() formato = formato_var.get() dimensione = (int(entry_larghezza.get()), int(entry_altezza.get())) # Verifica che tutti i campi siano stati compilati if not testo or not nome_file or not formato or not dimensione: messagebox.showerror("Errore", "Tutti i campi sono obbligatori!") return # Crea l'immagine try: immagine = Image.new('RGB', dimensione, (255, 255, 255)) draw = ImageDraw.Draw(immagine) font = ImageFont.load_default() # Formatta il testo margine = 10 max_caratteri_per_riga = dimensione[0] // (font.size // 2) righe = textwrap.wrap(testo, width=max_caratteri_per_riga) # Calcola l'altezza totale del testo altezza_testo = len(righe) * font.size y_testo = (dimensione[1] - altezza_testo) // 2 # Disegna ogni riga di testo sull'immagine for riga in righe: larghezza_riga = draw.textlength(riga, font=font) x_testo = (dimensione[0] - larghezza_riga) // 2 draw.text((x_testo, y_testo), riga, font=font, fill=(0, 0, 0)) y_testo += font.size # Salva l'immagine nome_file_completo = f"{nome_file}.{formato.lower()}" immagine.save(nome_file_completo, format=formato.upper()) messagebox.showinfo("Successo", f"Immagine salvata come {nome_file_completo}") except Exception as e: messagebox.showerror("Errore", f"Si è verificato un errore: {str(e)}") # Creazione della finestra principale root = Tk() root.title("Generatore di Immagini da Testo") # Etichette e campi di input Label(root, text="Testo:").grid(row=0, column=0, padx=10, pady=10) entry_testo = Entry(root, width=50) entry_testo.grid(row=0, column=1, padx=10, pady=10) Label(root, text="Nome file:").grid(row=1, column=0, padx=10, pady=10) entry_nome = Entry(root, width=50) entry_nome.grid(row=1, column=1, padx=10, pady=10) Label(root, text="Formato:").grid(row=2, column=0, padx=10, pady=10) formati = ["PNG", "JPG", "GIF"] formato_var = StringVar(root) formato_var.set(formati[0]) # Imposta il formato predefinito OptionMenu(root, formato_var, *formati).grid(row=2, column=1, padx=10, pady=10) Label(root, text="Larghezza:").grid(row=3, column=0, padx=10, pady=10) entry_larghezza = Entry(root, width=20) entry_larghezza.grid(row=3, column=1, padx=10, pady=10) Label(root, text="Altezza:").grid(row=4, column=0, padx=10, pady=10) entry_altezza = Entry(root, width=20) entry_altezza.grid(row=4, column=1, padx=10, pady=10) # Pulsante per generare l'immagine Button(root, text="Genera Immagine", command=genera_immagine_da_testo).grid(row=5, column=0, columnspan=2, pady=20) # Avvio dell'interfaccia grafica root.mainloop()

Funzionamento del Codice

  • Interfaccia Grafica: Utilizziamo Tkinter per creare una finestra con campi di input per il testo, il nome del file, il formato e le dimensioni dell’immagine. Ogni campo è associato a un’etichetta descrittiva.
  • Funzione genera_immagine_da_testo: Questa funzione viene chiamata quando l’utente clicca sul pulsante “Genera Immagine”. Recupera i valori inseriti dall’utente, verifica che tutti i campi siano stati compilati, e genera l’immagine utilizzando la libreria Pillow. Il testo viene formattato e centrato nell’immagine, che viene poi salvata con il nome e il formato specificati.
  • Gestione degli Errori: Se si verifica un errore durante la generazione dell’immagine, viene mostrato un messaggio di errore all’utente.

Esecuzione del Programma

Per eseguire il programma, salva il codice in un file, ad esempio generatore_immagini_gui.py, e eseguilo con Python:

python generatore_immagini_gui.py

Apparirà una finestra in cui potrai inserire il testo, il nome del file, il formato e le dimensioni dell’immagine. Cliccando su “Genera Immagine”, verrà creato e salvato il file immagine.

Domande Frequenti (FAQ)

1. Posso aggiungere altri formati di immagine?
Sì, puoi estendere il menu a tendina per includere altri formati supportati da Pillow, come BMP o TIFF.

2. Come posso cambiare il font del testo?
Puoi utilizzare un font personalizzato caricandolo con ImageFont.truetype(). Ad esempio:

font = ImageFont.truetype("arial.ttf", size=40)

3. Posso modificare il colore di sfondo dell’immagine?
Sì, puoi cambiare il colore di sfondo modificando il parametro (255, 255, 255) nella funzione Image.new().

Conclusione

In questo articolo abbiamo visto come creare un’interfaccia grafica con Tkinter per generare immagini a partire da un testo. Abbiamo utilizzato la libreria Pillow per manipolare le immagini e abbiamo creato un’applicazione semplice ma potente che può essere estesa in molti modi.

Ora che hai gli strumenti necessari, ti incoraggio a sperimentare con il codice: prova ad aggiungere nuove funzionalità, come la possibilità di scegliere il colore del testo o di aggiungere immagini di sfondo. La pratica è il modo migliore per imparare e migliorare le tue competenze di programmazione!

Risorse Aggiuntive

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Translate »
Torna in alto