import tkinter as tk
from tkinter import filedialog, messagebox, ttk
from PIL import Image
import pillow_heif
import os
pillow_heif.register_heif_opener()
def convert_images():
mode = mode_var.get()
files = []
# انتخاب فایل یا پوشه
if mode == "فایل":
files = filedialog.askopenfilenames(filetypes=[("Images", "*.heic *.webp *.jpg *.png")])
else:
folder = filedialog.askdirectory()
if folder:
for f in os.listdir(folder):
if f.lower().endswith((".heic", ".webp", ".jpg", ".png")):
files.append(os.path.join(folder, f))
if not files:
return
output_dir = filedialog.askdirectory()
if not output_dir:
return
format_choice = format_var.get()
quality = quality_scale.get()
count = 0
for file in files:
try:
img = Image.open(file)
name = os.path.splitext(os.path.basename(file))[0]
if format_choice == "JPG":
save_path = os.path.join(output_dir, name + ".jpg")
img = img.convert("RGB")
img.save(save_path, "JPEG", quality=quality, optimize=True)
elif format_choice == "PNG":
save_path = os.path.join(output_dir, name + ".png")
img.save(save_path, "PNG", optimize=True)
count += 1
except:
pass
messagebox.showinfo("Done", f"{count} فایل تبدیل شد")
# GUI
root = tk.Tk()
root.title("Pro Image Converter (HEIC / WEBP)")
root.geometry("420x300")
# حالت انتخاب
mode_var = tk.StringVar(value="فایل")
tk.Label(root, text="حالت انتخاب:").pack()
tk.Radiobutton(root, text="انتخاب فایلها", variable=mode_var, value="فایل").pack()
tk.Radiobutton(root, text="تبدیل کل پوشه", variable=mode_var, value="پوشه").pack()
# فرمت خروجی
format_var = tk.StringVar(value="JPG")
tk.Label(root, text="فرمت خروجی:").pack()
tk.Radiobutton(root, text="JPG (کم حجمتر)", variable=format_var, value="JPG").pack()
tk.Radiobutton(root, text="PNG (کیفیت بالا)", variable=format_var, value="PNG").pack()
# کیفیت JPG
tk.Label(root, text="کیفیت JPG (فقط برای JPG):").pack()
quality_scale = ttk.Scale(root, from_=10, to=100, orient="horizontal")
quality_scale.set(85)
quality_scale.pack()
# دکمه تبدیل
tk.Button(root, text="شروع تبدیل", command=convert_images, height=2, bg="green", fg="white").pack(pady=20)
root.mainloop()
format_var = tk.StringVar(value="JPG")
tk.Radiobutton(root, text="JPG (کم حجم)", variable=format_var, value="JPG").pack()
tk.Radiobutton(root, text="PNG (کیفیت بالا)", variable=format_var, value="PNG").pack()
# کیفیت
tk.Label(root, text="JPEG Quality").pack()
quality_scale = ttk.Scale(root, from_=10, to=100, orient="horizontal")
quality_scale.set(85)
quality_scale.pack()
# Progress
progress = ttk.Progressbar(root, length=400)
progress.pack(pady=10)
# Convert
tk.Button(root, text="START CONVERT", bg="green", fg="white", height=2, command=convert).pack()
امکانات این نسخه:
:heavy_check_mark: تبدیل HEIC / WEBP / JPG / PNG
:heavy_check_mark: انتخاب فایل یا کل پوشه
:heavy_check_mark: کنترل کیفیت JPG (10 تا 100)
:heavy_check_mark: کاهش حجم فایل با optimize
:heavy_check_mark: رابط شبیه نرمافزار واقعی