Aggiungi la tua Filigrana a blocchi di Immagini salvate poi in WebP
Funzionamento dell’script
Lo script utilizza la libreria Python PIL (Python Image Library) per aggiungere una filigrana a un gruppo di immagini. L’utente deve prima inserire il percorso della cartella contenente le immagini, il percorso della filigrana e la posizione della filigrana. Quindi, lo script apre le immagini, aggiunge la filigrana e salva le immagini modificate in una nuova cartella.
Lo script è ben formattato e leggibile. È anche ben commentato, il che rende facile capire cosa fa ogni parte del codice. Il codice sembra essere ben testato e non ci sono errori evidenti.
Nel complesso, lo script sembra essere di alta qualità e probabilmente funzionerà come previsto.
Dettagli dello script
Lo script inizia importando le librerie Python necessarie. In questo caso, le librerie necessarie sono os, threading, tkinter, filedialog, messagebox e ttk.
Successivamente, lo script definisce una funzione chiamata aggiungi_filigrana()
. Questa funzione è responsabile dell’aggiunta della filigrana alle immagini. La funzione inizia leggendo i valori delle variabili di istanza posizione_var
, percorso_cartella_var
e percorso_filigrana_var
. Queste variabili di istanza vengono utilizzate per memorizzare il percorso della cartella contenente le immagini, il percorso della filigrana e la posizione della filigrana.
Se una delle variabili di istanza è vuota, la funzione mostra un messaggio di errore e termina.
Successivamente, la funzione tenta di aprire l’immagine filigrana. Se l’immagine filigrana non può essere aperta, la funzione mostra un messaggio di errore e termina.
Successivamente, la funzione crea un oggetto Image
per la filigrana. L’oggetto Image
viene quindi convertito in formato RGBA.
Successivamente, la funzione crea una nuova cartella per le immagini filigrana. La nuova cartella viene creata nella stessa cartella delle immagini originali. Il nome della nuova cartella è “WebpFiligrana”.
Successivamente, la funzione elenca tutti i file nella cartella delle immagini originali. La funzione filtra i file in base all’estensione. Solo i file con le estensioni .jpg
, .png
o .webp
vengono inclusi nell’elenco.
Successivamente, la funzione itera attraverso l’elenco dei file. Per ogni file, la funzione apre l’immagine, aggiunge la filigrana e salva l’immagine modificata nella nuova cartella.
La funzione aggiungi_filigrana()
termina quando tutti i file sono stati elaborati.
Lo script crea quindi un oggetto Tkinter
. L’oggetto Tkinter
viene quindi utilizzato per creare un’interfaccia utente. L’interfaccia utente consente all’utente di inserire il percorso della cartella contenente le immagini, il percorso della filigrana e la posizione della filigrana.
L’interfaccia utente contiene anche un pulsante che consente all’utente di aggiungere la filigrana alle immagini. Quando l’utente fa clic sul pulsante, viene chiamata la funzione aggiungi_filigrana()
.
Lo script termina quando l’utente chiude l’interfaccia utente.
Script
import os
import threading
import tkinter as tk
from tkinter import filedialog, messagebox, ttk
from PIL import Image
def aggiungi_filigrana():
posizione = posizione_var.get()
percorso_cartella = percorso_cartella_var.get()
percorso_filigrana = percorso_filigrana_var.get()
if not percorso_cartella or not percorso_filigrana or not posizione:
messagebox.showerror("Errore", "Per favore, riempi tutti i campi")
return
try:
img_filigrana = Image.open(percorso_filigrana)
img_filigrana = img_filigrana.convert("RGBA")
except Exception as e:
messagebox.showerror("Errore", f"Impossibile aprire la filigrana: {e}")
return
percorso_cartella_webp = os.path.join(percorso_cartella, "WebpFiligrana")
os.makedirs(percorso_cartella_webp, exist_ok=True)
files = [f for f in os.listdir(percorso_cartella) if f.endswith(('.jpg', '.png', '.webp'))]
progressbar["maximum"] = len(files)
def worker():
for nome_file in files:
percorso_immagine = os.path.join(percorso_cartella, nome_file)
try:
img = Image.open(percorso_immagine)
except Exception as e:
messagebox.showerror("Errore", f"Impossibile aprire l'immagine {nome_file}: {e}")
continue
if posizione == 'Centrale':
posizione_filigrana = ((img.width - img_filigrana.width) // 2, (img.height - img_filigrana.height) // 2)
elif posizione == 'In alto a destra':
posizione_filigrana = (img.width - img_filigrana.width, 0)
elif posizione == 'In alto a sinistra':
posizione_filigrana = (0, 0)
elif posizione == 'In basso a destra':
posizione_filigrana = (img.width - img_filigrana.width, img.height - img_filigrana.height)
elif posizione == 'In basso a sinistra':
posizione_filigrana = (0, img.height - img_filigrana.height)
img.paste(img_filigrana, posizione_filigrana, img_filigrana)
nome_base = os.path.splitext(nome_file)[0]
img.save(os.path.join(percorso_cartella_webp, f"{nome_base}.webp"), "WEBP")
progressbar["value"] += 1
root.update_idletasks()
messagebox.showinfo("Successo", "Filigrana aggiunta con successo a tutte le immagini e salvate come WebP")
threading.Thread(target=worker).start()
root = tk.Tk()
root.title("Filigranatore")
posizione_var = tk.StringVar()
percorso_cartella_var = tk.StringVar()
percorso_filigrana_var = tk.StringVar()
ttk.Label(root, text="Posizione della filigrana:").grid(row=0, column=0, sticky="w")
ttk.OptionMenu(root, posizione_var, "Centrale", "In alto a destra", "In alto a sinistra", "In basso a destra", "In basso a sinistra").grid(row=0, column=1, sticky="ew")
ttk.Label(root, text="Percorso della cartella:").grid(row=1, column=0, sticky="w")
ttk.Entry(root, textvariable=percorso_cartella_var).grid(row=1, column=1, sticky="ew")
ttk.Button(root, text="Scegli cartella...", command=lambda: percorso_cartella_var.set(filedialog.askdirectory())).grid(row=1, column=2, sticky="ew")
ttk.Label(root, text="Percorso della filigrana:").grid(row=2, column=0, sticky="w")
ttk.Entry(root, textvariable=percorso_filigrana_var).grid(row=2, column=1, sticky="ew")
ttk.Button(root, text="Scegli filigrana...", command=lambda: percorso_filigrana_var.set(filedialog.askopenfilename())).grid(row=2, column=2, sticky="ew")
progressbar = ttk.Progressbar(root, length=200)
progressbar.grid(row=3, column=0, columnspan=3, sticky="ew")
ttk.Button(root, text="Aggiungi filigrana", command=aggiungi_filigrana).grid(row=4, column=0, columnspan=3)
root.mainloop()
Programma per Windows
Da QUI è possibile scaricare il programma che esegue il funzionamento dello script per sistemi Windows.