Úvod
V dnešnom digitálnom svete je odstránenie pozadia z obrázkov bežnou úlohou, ktorá sa využíva pri tvorbe obsahu, grafike alebo e-commerce. Hoci existujú rôzne online nástroje, vytvorenie vlastného riešenia môže byť zábavné, poučné a flexibilné. V tomto článku vám predstavím, ako vytvoriť vlastnú desktopovú aplikáciu v jazyku Python na odstránenie pozadia z obrázkov pomocou knižnice rembg a grafického rozhrania pomocou Tkinter. Odstránenie pozadia obrázku v Python nikdy nebolo jednoduchšie.

Funkcionalita aplikácie
Táto aplikácia umožňuje:
- Nahrať obrázok: Používateľ vyberie obrázok z počítača.
- Odstrániť pozadie: Pomocou knižnice
rembgsa z obrázka odstráni pozadie. - Zobraziť výsledok: Používateľ vidí pôvodný obrázok aj výsledný obrázok bez pozadia.
- Automatické uloženie: Upravený obrázok sa automaticky uloží do rovnakého priečinka s príponou
_no_bg.
Použité technológie
- Python: Programovací jazyk na vytvorenie aplikácie.
- Tkinter: Na vytvorenie jednoduchého grafického rozhrania.
- Pillow: Na prácu s obrázkami.
- rembg: Na odstránenie pozadia z obrázkov.
Kroky k vytvoreniu aplikácie
1. Automatická inštalácia potrebných knižníc
Aplikácia pri spustení kontroluje, či sú všetky knižnice nainštalované. Ak nie, automaticky ich nainštaluje.
|
1 2 3 4 5 6 7 8 |
# Automatická kontrola a inštalácia knižníc def install_required_packages(): required_packages = ['tkinter', 'Pillow', 'rembg', 'onnxruntime'] for package in required_packages: try: __import__(package if package != 'tkinter' else 'tkinter') except ImportError: subprocess.check_call([sys.executable, '-m', 'pip', 'install', package]) |
2. Hlavné okno aplikácie
Hlavné okno obsahuje nadpis, tlačidlo na spracovanie obrázka a panely na zobrazenie pôvodného a upraveného obrázka.
|
1 2 3 4 |
# Vytvorenie grafického rozhrania self.root.title("Odstránenie pozadia") self.root.geometry("800x600") self.root.configure(bg="#f7f7f7") |
3. Spracovanie obrázka
Používateľ klikne na tlačidlo Spracuj, kde si vyberie obrázok. Aplikácia odstráni pozadie, zobrazí pôvodný aj výsledný obrázok a upravený obrázok uloží.
|
1 2 |
self.output_path = os.path.splitext(self.input_path)[0] + "_no_bg.png" remove_background(self.input_path, self.output_path) |
4. Zobrazenie obrázkov
Aplikácia využíva knižnicu Pillow na zobrazenie obrázkov v zmenšenej veľkosti, aby sa zmestili do GUI.
|
1 2 3 |
original_image.thumbnail((300, 200)) self.original_image = ImageTk.PhotoImage(original_image) self.original_image_panel.configure(image=self.original_image) |
Zdrojový kód (kompletný)
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 |
import os import subprocess import sys # Automatická kontrola a inštalácia knižníc def install_required_packages(): required_packages = ['tkinter', 'Pillow', 'rembg', 'onnxruntime'] for package in required_packages: try: __import__(package if package != 'tkinter' else 'tkinter') except ImportError: subprocess.check_call([sys.executable, '-m', 'pip', 'install', package]) install_required_packages() try: import tkinter as tk from tkinter import filedialog, messagebox except ModuleNotFoundError: print("\nError: 'tkinter' module not found. Make sure Python is installed with Tkinter support.") print("If you are using a minimal Python installation, please reinstall Python with the Tkinter option enabled.") print("Alternatively, ensure that the 'python3-tk' package is installed for your system (e.g., 'sudo apt-get install python3-tk' on Ubuntu).") sys.exit(1) from PIL import Image, ImageTk from rembg import remove def remove_background(input_path, output_path): with open(input_path, 'rb') as input_file: input_image = input_file.read() output_image = remove(input_image) with open(output_path, 'wb') as output_file: output_file.write(output_image) class RemoveBackgroundApp: def __init__(self, root): self.root = root self.root.title("Odstránenie pozadia") self.root.geometry("800x600") self.root.configure(bg="#f7f7f7") self.input_path = None self.output_path = None # Vytvorenie rozhrania self.create_widgets() def create_widgets(self): # Nadpis title_label = tk.Label(self.root, text="Aplikácia na odstránenie pozadia", font=("Arial", 18, "bold"), bg="#f7f7f7") title_label.pack(pady=20) # Tlačidlo na spracovanie obrázka process_button = tk.Button(self.root, text="Spracuj", command=self.process_image, font=("Arial", 14), bg="#2196f3", fg="white") process_button.pack(pady=10) # Rámček na zobrazenie obrázkov self.image_frame = tk.Frame(self.root, bg="#f7f7f7") self.image_frame.pack(pady=20) self.original_label = tk.Label(self.image_frame, text="Pôvodný obrázok", font=("Arial", 12), bg="#f7f7f7") self.original_label.grid(row=0, column=0, padx=20) self.result_label = tk.Label(self.image_frame, text="Obrázok bez pozadia", font=("Arial", 12), bg="#f7f7f7") self.result_label.grid(row=0, column=1, padx=20) self.original_image_panel = tk.Label(self.image_frame, bg="#e0e0e0", width=300, height=200) self.original_image_panel.grid(row=1, column=0, padx=20, pady=10) self.result_image_panel = tk.Label(self.image_frame, bg="#e0e0e0", width=300, height=200) self.result_image_panel.grid(row=1, column=1, padx=20, pady=10) def process_image(self): self.input_path = filedialog.askopenfilename(filetypes=[("Image Files", "*.png;*.jpg;*.jpeg")]) if not self.input_path: messagebox.showerror("Chyba", "Prosím, vyberte obrázok na spracovanie.") return self.output_path = os.path.splitext(self.input_path)[0] + "_no_bg.png" try: # Zobrazenie pôvodného obrázka original_image = Image.open(self.input_path).convert("RGBA") original_image.thumbnail((300, 200)) self.original_image = ImageTk.PhotoImage(original_image) self.original_image_panel.configure(image=self.original_image) self.original_image_panel.image = self.original_image # Spracovanie na odstránenie pozadia remove_background(self.input_path, self.output_path) # Zobrazenie výsledného obrázka result_image = Image.open(self.output_path).convert("RGBA") result_image.thumbnail((300, 200)) self.result_image = ImageTk.PhotoImage(result_image) self.result_image_panel.configure(image=self.result_image) self.result_image_panel.image = self.result_image messagebox.showinfo("Hotovo", "Pozadie bolo úspešne odstránené a obrázok bol uložený ako: {}".format(self.output_path)) except Exception as e: messagebox.showerror("Chyba", f"Pri spracovaní obrázka došlo k chybe: {str(e)}") if __name__ == "__main__": root = tk.Tk() app = RemoveBackgroundApp(root) root.mainloop() |
Používanie aplikácie
- Spustite aplikáciu.
- Kliknite na tlačidlo Spracuj.
- Vyberte obrázok, ktorý chcete upraviť.
- Potom si pozrite výsledok – pôvodný obrázok aj obrázok bez pozadia.
- Upravený obrázok sa automaticky uloží do rovnakého priečinka s príponou
_no_bg.
Výhody tohto riešenia
- Jednoduchosť: Užívateľsky prívetivé rozhranie.
- Automatizácia: Automatická inštalácia knižníc a ukladanie výsledkov.
- Flexibilita: Možnosť prispôsobiť kód podľa vlastných potrieb.
Možné rozšírenia
- Podpora hromadného spracovania obrázkov.
- Pridanie funkcií na ďalšiu úpravu obrázkov (napr. orezávanie, zmena veľkosti).
- Export výsledkov do rôznych formátov.
Záver
Aplikácia na odstránenie pozadia obrázku v Python vám uľahčí prácu, keď potrebujete rýchlo odstrániť pozadie bez nutnosti inštalácie softvéru. Táto aplikácia je skvelým príkladom, ako efektívne využiť Python na riešenie praktických problémov. Ak sa chcete naučiť viac alebo máte nápady na vylepšenia, neváhajte experimentovať s kódom!





