ساخت برنامه مدیریت تصاویر با پایتون: پروژه‌ای خلاقانه و کاربردی

ساخت برنامه مدیریت تصاویر با پایتون: پروژه‌ای خلاقانه و کاربردی

در دنیای دیجیتال امروز، مدیریت تصاویر به یک نیاز اساسی تبدیل شده است. چه یک عکاس حرفه‌ای باشید، چه یک طراح گرافیک، یا صرفاً فردی که تعداد زیادی عکس در کامپیوتر خود دارد، یک برنامه مدیریت تصاویر کارآمد می‌تواند به شما در سازماندهی، جستجو و ویرایش تصاویر کمک کند. در این مقاله، به شما آموزش می‌دهیم که چگونه با استفاده از زبان برنامه‌نویسی پایتون، یک برنامه مدیریت تصاویر ساده اما کاربردی بسازید. این پروژه در دسته ‘پروژه‌های خلاقانه و کاربردی’ پایتون قرار می‌گیرد و به شما کمک می‌کند تا مهارت‌های برنامه‌نویسی خود را در یک زمینه ملموس به کار ببرید.

پیش‌نیازها

قبل از شروع، مطمئن شوید که موارد زیر را در اختیار دارید:

  • پایتون (نسخه 3.6 یا بالاتر)
  • کتابخانه Pillow (برای کار با تصاویر)
  • کتابخانه Tkinter (برای رابط کاربری گرافیکی)

برای نصب کتابخانه‌ها، می‌توانید از دستورات زیر در ترمینال یا خط فرمان استفاده کنید:

pip install Pillow
pip install tk

طراحی برنامه

برنامه مدیریت تصاویر ما دارای ویژگی‌های زیر خواهد بود:

  • انتخاب تصاویر از یک پوشه
  • نمایش تصاویر در یک لیست
  • نمایش تصویر انتخاب شده در یک پنجره بزرگتر
  • امکان تغییر نام تصویر
  • امکان حذف تصویر

ساختار کلی برنامه

برنامه ما از دو بخش اصلی تشکیل شده است:

  1. رابط کاربری گرافیکی (GUI): با استفاده از کتابخانه Tkinter، یک رابط کاربری گرافیکی ایجاد می‌کنیم که به کاربر امکان می‌دهد با برنامه تعامل داشته باشد.
  2. منطق برنامه: این بخش شامل کدی است که تصاویر را از پوشه انتخاب شده بارگیری می‌کند، آن‌ها را در لیست نمایش می‌دهد، و عملیات‌های مختلف (تغییر نام، حذف) را انجام می‌دهد.

کد برنامه

در اینجا کد کامل برنامه را ارائه می‌دهیم. کد را به صورت مرحله به مرحله توضیح خواهیم داد.

import tkinter as tk
from tkinter import filedialog
from PIL import Image, ImageTk
import os

class ImageManager:
    def __init__(self, master):
        self.master = master
        master.title("مدیریت تصاویر")

        self.image_list = []
        self.current_image_index = 0

        # ویجت‌ها
        self.listbox = tk.Listbox(master, width=50)
        self.listbox.pack(pady=10)

        self.image_label = tk.Label(master)
        self.image_label.pack()

        self.rename_button = tk.Button(master, text="تغییر نام", command=self.rename_image)
        self.rename_button.pack(side=tk.LEFT, padx=5)

        self.delete_button = tk.Button(master, text="حذف", command=self.delete_image)
        self.delete_button.pack(side=tk.LEFT, padx=5)

        self.browse_button = tk.Button(master, text="انتخاب پوشه", command=self.browse_folder)
        self.browse_button.pack(pady=10)

    def browse_folder(self):
        folder_path = filedialog.askdirectory()
        if folder_path:
            self.load_images(folder_path)

    def load_images(self, folder_path):
        self.image_list = []
        for filename in os.listdir(folder_path):
            if filename.endswith((".jpg", ".jpeg", ".png", ".gif")):
                self.image_list.append(os.path.join(folder_path, filename))
        
        self.update_listbox()
        if self.image_list:
            self.display_image(0)

    def update_listbox(self):
        self.listbox.delete(0, tk.END)
        for image_path in self.image_list:
            self.listbox.insert(tk.END, os.path.basename(image_path))

    def display_image(self, index):
        if 0 <= index < len(self.image_list):
            self.current_image_index = index
            image_path = self.image_list[index]
            img = Image.open(image_path)
            img = img.resize((400, 300))  # تغییر اندازه تصویر
            photo = ImageTk.PhotoImage(img)
            self.image_label.config(image=photo)
            self.image_label.image = photo

    def rename_image(self):
        if self.image_list:
            current_image_path = self.image_list[self.current_image_index]
            new_name = tk.simpledialog.askstring("تغییر نام", "نام جدید را وارد کنید:", initialvalue=os.path.basename(current_image_path))
            if new_name:
                new_path = os.path.join(os.path.dirname(current_image_path), new_name)
                os.rename(current_image_path, new_path)
                self.image_list[self.current_image_index] = new_path
                self.update_listbox()
                self.display_image(self.current_image_index)

    def delete_image(self):
        if self.image_list:
            current_image_path = self.image_list[self.current_image_index]
            if tk.messagebox.askyesno("حذف تصویر", "آیا مطمئن هستید که می‌خواهید این تصویر را حذف کنید؟"):
                os.remove(current_image_path)
                del self.image_list[self.current_image_index]
                self.update_listbox()
                if self.image_list:
                    self.display_image(min(self.current_image_index, len(self.image_list) - 1))
                else:
                    self.image_label.config(image='')

root = tk.Tk()
image_manager = ImageManager(root)
root.mainloop()

توضیح کد

کلاس ImageManager: این کلاس شامل تمام منطق و رابط کاربری برنامه است.

  • __init__(self, master): سازنده کلاس است که ویجت‌های رابط کاربری را ایجاد و پیکربندی می‌کند.
  • browse_folder(self): این متد یک پنجره انتخاب پوشه را باز می‌کند و به کاربر امکان می‌دهد پوشه‌ای را که تصاویر در آن قرار دارند انتخاب کند.
  • load_images(self, folder_path): این متد تمام فایل‌های تصویری (jpg، jpeg، png، gif) را از پوشه انتخاب شده بارگیری می‌کند و آن‌ها را در لیست self.image_list ذخیره می‌کند.
  • update_listbox(self): این متد لیست تصاویر را در ویجت Listbox نمایش می‌دهد.
  • display_image(self, index): این متد تصویر موجود در شاخص مشخص شده را در ویجت Label نمایش می‌دهد.
  • rename_image(self): این متد به کاربر امکان می‌دهد نام تصویر انتخاب شده را تغییر دهد.
  • delete_image(self): این متد تصویر انتخاب شده را حذف می‌کند.

ایجاد و اجرای برنامه:

  • root = tk.Tk(): یک پنجره Tkinter ایجاد می‌کند.
  • image_manager = ImageManager(root): یک شیء از کلاس ImageManager ایجاد می‌کند و آن را به پنجره Tkinter متصل می‌کند.
  • root.mainloop(): حلقه اصلی Tkinter را اجرا می‌کند که باعث می‌شود پنجره برنامه نمایش داده شود و به تعاملات کاربر پاسخ دهد.

بهبود برنامه

برنامه ما در حال حاضر یک نسخه ساده است. می‌توانید با افزودن ویژگی‌های زیر آن را بهبود بخشید:

  • پیش‌نمایش تصاویر در لیست: به جای نمایش فقط نام فایل، یک پیش‌نمایش کوچک از تصویر را در لیست نمایش دهید.
  • جستجو در تصاویر: به کاربر امکان دهید تصاویر را بر اساس نام فایل یا تاریخ ایجاد جستجو کند.
  • ویرایش تصاویر: امکان ویرایش تصاویر (مانند تغییر اندازه، برش، تنظیم روشنایی و کنتراست) را به برنامه اضافه کنید.
  • ذخیره تغییرات: امکان ذخیره تغییرات اعمال شده بر روی تصاویر را فراهم کنید.
  • پشتیبانی از فرمت‌های تصویری بیشتر: پشتیبانی از فرمت‌های تصویری بیشتری را به برنامه اضافه کنید.

نتیجه‌گیری

در این مقاله، به شما آموزش دادیم که چگونه با استفاده از پایتون و کتابخانه‌های Tkinter و Pillow، یک برنامه مدیریت تصاویر ساده اما کاربردی بسازید. این پروژه یک مثال عالی از نحوه استفاده از پایتون برای حل مسائل دنیای واقعی است و به شما کمک می‌کند تا مهارت‌های برنامه‌نویسی خود را در یک زمینه ملموس به کار ببرید. با افزودن ویژگی‌های بیشتر، می‌توانید این برنامه را به یک ابزار قدرتمند برای مدیریت تصاویر خود تبدیل کنید.

بدون دیدگاه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *