Zde je jednoduchý příklad programu, který vytváří GUI pomocí knihovny Tkinter a aplikuje vodoznak na vybraný obrázek pomocí knihovny PIL (Pillow).
Tento program vytvoří okno s textovým polem pro zadání textu vodoznaku, velikostí fontu, nastavením průhlednosti v rozmezí 0-100%, tlačítkem pro výběr obrázku a volbou, kam se má textové pole umístit.
Poznámka: Tento kód není odolný vůči chybám a neřeší mnoho různých situací, které mohou nastat při interakci s uživatelem nebo při manipulaci s obrázky nebo soubory. Je to pouze základní demonstrace toho, jak lze takový program vytvořit. Pro produkční použití by bylo třeba kód značně vylepšit a rozšířit.
from tkinter import Tk, Label, Button, Entry, filedialog, StringVar, OptionMenu
from PIL import Image, ImageDraw, ImageFont
class Watermarker:
def __init__(self, master):
self.master = master
master.title("Vodoznak")
self.label = Label(master, text="Vložte text vodoznaku:")
self.label.pack()
self.entry = Entry(master)
self.entry.pack()
self.size_label = Label(master, text="Vložte velikost textu:")
self.size_label.pack()
self.size_entry = Entry(master)
self.size_entry.pack()
self.opacity_label = Label(master, text="Uveďte průhlednost (0-100):")
self.opacity_label.pack()
self.opacity_entry = Entry(master)
self.opacity_entry.pack()
self.position_label = Label(master, text="Vyberte polohu vodoznaku:")
self.position_label.pack()
self.positionVar = StringVar(master)
self.positionVar.set("Dole vpravo") # defaultní hodnota
self.position_options = OptionMenu(master, self.positionVar, "Dole vpravo", "Dole vlevo", "Nahoře vlevo", "Nahoře vpravo")
self.position_options.pack()
self.greet_button = Button(master, text="Vybrat a uložit obrázek", command=self.watermark)
self.greet_button.pack()
def watermark(self):
watermark_text = self.entry.get()
text_size = int(self.size_entry.get())
opacity = int(self.opacity_entry.get())
position = self.positionVar.get()
file_path = filedialog.askopenfilename()
if file_path:
image = Image.open(file_path).convert("RGBA")
watermark_image = Image.new('RGBA', image.size, (255, 255, 255, 0))
draw = ImageDraw.Draw(watermark_image)
font = ImageFont.truetype('arial.ttf', text_size)
textwidth, textheight = draw.textsize(watermark_text, font)
margin = 10
if position == "Dole vpravo":
x = image.width - textwidth - margin
y = image.height - textheight - margin
elif position == "Dole vlevo":
x = margin
y = image.height - textheight - margin
elif position == "Nahoře vlevo":
x = margin
y = margin
else: # Nahoře vpravo
x = image.width - textwidth - margin
y = margin
draw.text((x, y), watermark_text, font=font, fill=(255, 255, 255, int((opacity / 100) * 255)))
watermarked = Image.alpha_composite(image, watermark_image)
watermarked.show()
watermarked.save(f"watermarked_{file_path}")
root = Tk()
my_gui = Watermarker(root)
root.mainloop()
Přizpůsobil jsem kód pro nastavení průhlednosti textu a navíc jsem přidal textové pole pro zadání hodnoty průhlednosti. Vezměte prosím na vědomí, že hodnoty průhlednosti by měly být v rozmezí od 0 do 100, kde 0 znamená úplnou průhlednost (tj. text nebude viditelný) a 100 znamená žádnou průhlednost (tj. text bude plně viditelný).
Ujistěte se prosím, že máte v systému nainstalovanou nejnovější verzi knihovny PIL (Pillow), aby vše fungovalo správně.