کد کامل تبدیل عکس ایفون

import tkinter as tk

from tkinter import filedialog, messagebox

from PIL import Image

import pillow_heif

import os

pillow_heif.register_heif_opener()

def convert_images():

files = filedialog.askopenfilenames(filetypes=[("HEIC Files", "*.heic")])

if not files:

return

output_dir = filedialog.askdirectory()

if not output_dir:

return

count = 0

for file in files:

try:

img = Image.open(file)

name = os.path.splitext(os.path.basename(file))[0] + ".jpg"

save_path = os.path.join(output_dir, name)

img.convert("RGB").save(save_path, "JPEG", quality=95)

count += 1

except:

pass

messagebox.showinfo("Done", f"{count} عکس تبدیل شد")

# GUI

root = tk.Tk()

root.title("HEIC to JPG Converter")

root.geometry("300x150")

btn = tk.Button(root, text="انتخاب و تبدیل عکس‌ها", command=convert_images)

btn.pack(expand=True)

root.mainloop()

کد تبدیل HEIC به JPG

from PIL import Image
import pillow_heif
import os

# فعال کردن پشتیبانی HEIC
pillow_heif.register_heif_opener()

input_folder = "input_images"
output_folder = "output_images"

os.makedirs(output_folder, exist_ok=True)

for file in os.listdir(input_folder):
if file.lower().endswith(".heic"):
img = Image.open(os.path.join(input_folder, file))

new_name = os.path.splitext(file)[0] + ".jpg"
save_path = os.path.join(output_folder, new_name)

img.convert("RGB").save(save_path, "JPEG", quality=95)

print("Done")

کد GUI حرفه‌ای (Quality Control + Batch)

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: رابط شبیه نرم‌افزار واقعی

عکس های WEBP و Heic به  بدون تستjpg

import tkinter as tk
from tkinter import filedialog, messagebox, ttk
from tkinterdnd2 import DND_FILES, TkinterDnD
from PIL import Image, ImageTk
import pillow_heif
import os

pillow_heif.register_heif_opener()


files_list = []


def add_files(event=None):
global files_list
new_files = root.tk.splitlist(event.data)
for f in new_files:
if os.path.isfile(f):
files_list.append(f)
update_listbox()


def choose_files():
global files_list
f = filedialog.askopenfilenames(filetypes=[("Images", "*.heic *.webp *.jpg *.png")])
files_list.extend(f)
update_listbox()


def choose_folder():
global files_list
folder = filedialog.askdirectory()
if folder:
for f in os.listdir(folder):
if f.lower().endswith((".heic", ".webp", ".jpg", ".png")):
files_list.append(os.path.join(folder, f))
update_listbox()


def update_listbox():
listbox.delete(0, tk.END)
for f in files_list:
listbox.insert(tk.END, os.path.basename(f))


def preview_image(event):
if not files_list:
return
try:
img = Image.open(files_list[listbox.curselection()[0]])
img.thumbnail((200, 200))
img = ImageTk.PhotoImage(img)
preview_label.config(image=img)
preview_label.image = img
except:
pass


def convert():
if not files_list:
return

out_dir = filedialog.askdirectory()
if not out_dir:
return

quality = quality_scale.get()
count = 0
total = len(files_list)

progress["maximum"] = total
progress["value"] = 0

for file in files_list:
try:
img = Image.open(file)
name = os.path.splitext(os.path.basename(file))[0]

if format_var.get() == "JPG":
img = img.convert("RGB")
img.save(os.path.join(out_dir, name + ".jpg"),
"JPEG", quality=quality, optimize=True)

else:
img.save(os.path.join(out_dir, name + ".png"),
"PNG", optimize=True)

count += 1
except:
pass

progress["value"] += 1
root.update_idletasks()

messagebox.showinfo("Done", f"{count} فایل تبدیل شد")


# GUI
root = TkinterDnD.Tk()
root.title("Pro Image Converter Ultra")
root.geometry("650x450")

root.drop_target_register(DND_FILES)
root.dnd_bind("<>", add_files)

# لیست فایل‌ها
listbox = tk.Listbox(root, width=40, height=15)
listbox.pack(side=tk.LEFT, padx=10, pady=10)
listbox.bind("<>", preview_image)

# پیش‌نمایش
preview_label = tk.Label(root)
preview_label.pack(side=tk.RIGHT, padx=10)

# دکمه‌ها
btn_frame = tk.Frame(root)
btn_frame.pack()

tk.Button(btn_frame, text="Add Files", command=choose_files).pack(side=tk.LEFT)
tk.Button(btn_frame, text="Add Folder", command=choose_folder).pack(side=tk.LEFT)

# فرمت
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()

root.mainloop()

امکانات این نسخه (سطح حرفه‌ای)
:heavy_check_mark: Drag & Drop واقعی
:heavy_check_mark: Preview عکس انتخابی
:heavy_check_mark: تبدیل دسته‌ای حرفه‌ای
:heavy_check_mark: Progress bar واقعی
:heavy_check_mark: کنترل کیفیت JPG (کم کردن حجم فایل)
:heavy_check_mark: تبدیل HEIC / WEBP بدون مشکل
:heavy_check_mark: شبیه نرم‌افزار ویندوز واقعی

تبدیل ویدئو به عکس


import os
import subprocess

video = input("Video file: ")

print("\nMode:")
print("1 = every frame")
print("2 = 1 frame per second")
print("3 = every 5 seconds")

mode = input("Choose: ")

os.makedirs("frames", exist_ok=True)

if mode == "1":
cmd = [
"ffmpeg", "-y",
"-i", video,
"frames/frame_%06d.jpg"
]

elif mode == "2":
cmd = [
"ffmpeg", "-y",
"-i", video,
"-vf", "fps=1",
"frames/frame_%06d.jpg"
]

else:
cmd = [
"ffmpeg", "-y",
"-i", video,
"-vf", "fps=1/5",
"frames/frame_%06d.jpg"
]

subprocess.run(cmd)

print("Done!")