
image.png

image.png
代碼如下:
import tkinter as tk
from tkinter import filedialog
from PIL import Image
import os
# 導(dǎo)入進度條相關(guān)的庫
from tkinter import ttk
import threading
import tkinter as tk
from tkinter import filedialog, messagebox
from tkinter import ttk
from PIL import Image, ImageTk
import os
import threading
# 用于顯示選擇的文件夾和圖片列表
def show_selected_folder(folder, listbox):
listbox.delete(0, tk.END)
files = [filename for filename in os.listdir(folder) if filename.endswith('.jpg') and not filename.endswith('_55.jpg')]
listbox.insert(tk.END, f"選擇的文件夾: {folder}")
listbox.insert(tk.END, f"待處理圖片數(shù)量: {len(files)}")
listbox.insert(tk.END, "待處理圖片列表:")
for filename in files:
listbox.insert(tk.END, filename)
# 更新進度和狀態(tài)信息
def update_progress(progress_bar, status_label, total_files, current_file, filename):
progress = (current_file / total_files) * 100
progress_bar['value'] = progress
progress_bar.update()
status_label.config(text=f"正在處理 {filename} ({current_file}/{total_files})")
# 批量處理圖片
def batch_process_images(progress_bar, status_label, listbox, result_frame):
folder = filedialog.askdirectory()
if not folder:
return
show_selected_folder(folder, listbox)
files = [filename for filename in os.listdir(folder) if filename.endswith('.jpg') and not filename.endswith('_55.jpg')]
total_files = len(files)
for index, filename in enumerate(files, start=1):
file_path = os.path.join(folder, filename)
try:
with Image.open(file_path) as img:
width, height = img.size
crop_width = min(500, width)
crop_height = min(500, height)
cropped_img = img.crop((0, 0, crop_width, crop_height))
new_filename = os.path.splitext(filename)[0] + '_55.jpg'
new_file_path = os.path.join(folder, new_filename)
cropped_img.save(new_file_path)
# 顯示對比圖片
show_image_comparison(img, cropped_img, result_frame)
update_progress(progress_bar, status_label, total_files, index, filename)
except Exception as e:
print(f"處理 {filename} 時出錯: {e}")
status_label.config(text=f"處理 {filename} 時出錯: {e}")
status_label.config(text="所有圖片處理完成!")
# 詢問是否打開文件夾
answer = messagebox.askyesno("處理完成", "是否打開處理后的文件夾?")
if answer:
os.startfile(folder)
# 顯示裁剪前后的圖片對比
def show_image_comparison(original_img, cropped_img, result_frame):
original_img = original_img.resize((200, 200))
cropped_img = cropped_img.resize((200, 200))
original_photo = ImageTk.PhotoImage(original_img)
cropped_photo = ImageTk.PhotoImage(cropped_img)
original_label = tk.Label(result_frame, image=original_photo)
original_label.image = original_photo
original_label.pack(side=tk.LEFT)
cropped_label = tk.Label(result_frame, image=cropped_photo)
cropped_label.image = cropped_photo
cropped_label.pack(side=tk.LEFT)
# 啟動處理線程
def start_processing(progress_bar, status_label, listbox, result_frame):
thread = threading.Thread(target=batch_process_images, args=(progress_bar, status_label, listbox, result_frame))
thread.start()
def update_progress(progress_bar, total_files, current_file):
# 計算當前進度
progress = (current_file / total_files) * 100
progress_bar['value'] = progress
progress_bar.update()
def batch_process_images(progress_bar, status_label):
# 選擇文件夾
folder = filedialog.askdirectory()
if not folder:
return
# 獲取所有需要處理的文件
files = [filename for filename in os.listdir(folder) if filename.endswith('.jpg') and not filename.endswith('_55.jpg')]
total_files = len(files)
# 遍歷文件夾中的所有文件
for index, filename in enumerate(files, start=1):
file_path = os.path.join(folder, filename)
try:
# 打開圖片
with Image.open(file_path) as img:
width, height = img.size
# 確定裁剪區(qū)域
crop_width = min(500, width)
crop_height = min(500, height)
# 裁剪圖片
cropped_img = img.crop((0, 0, crop_width, crop_height))
# 生成新的文件名
new_filename = os.path.splitext(filename)[0] + '_55.jpg'
new_file_path = os.path.join(folder, new_filename)
# 保存裁剪后的圖片
cropped_img.save(new_file_path)
# 更新進度條
update_progress(progress_bar, total_files, index)
# 更新狀態(tài)標簽
status_label.config(text=f"處理 {filename} 完成 ({index}/{total_files})")
except Exception as e:
print(f"處理 {filename} 時出錯: {e}")
status_label.config(text=f"處理 {filename} 時出錯: {e}")
# 處理完成提示
status_label.config(text="所有圖片處理完成!")
def start_processing(progress_bar, status_label):
# 創(chuàng)建線程來執(zhí)行圖片處理任務(wù)
thread = threading.Thread(target=batch_process_images, args=(progress_bar, status_label))
thread.start()
# 創(chuàng)建主窗口
root = tk.Tk()
root.title("批量處理JPG圖片")
# 增大窗口尺寸
root.geometry("600x200")
# 創(chuàng)建按鈕
button = tk.Button(root, text="選擇文件夾", command=lambda: start_processing(progress_bar, status_label))
button.pack(pady=20)
# 創(chuàng)建進度條
progress_bar = ttk.Progressbar(root, orient="horizontal", length=500, mode="determinate")
progress_bar.pack(pady=10)
# 創(chuàng)建狀態(tài)標簽
status_label = tk.Label(root, text="等待選擇文件夾...")
status_label.pack(pady=10)
# 運行主循環(huán)
root.mainloop()
def batch_process_images():
# 選擇文件夾
folder = filedialog.askdirectory()
if not folder:
return
# 遍歷文件夾中的所有文件
for filename in os.listdir(folder):
if filename.endswith('.jpg') and not filename.endswith('_55.jpg'):
file_path = os.path.join(folder, filename)
try:
# 打開圖片
with Image.open(file_path) as img:
width, height = img.size
# 確定裁剪區(qū)域
crop_width = min(500, width)
crop_height = min(500, height)
# 裁剪圖片
cropped_img = img.crop((0, 0, crop_width, crop_height))
# 生成新的文件名
new_filename = os.path.splitext(filename)[0] + '_55.jpg'
new_file_path = os.path.join(folder, new_filename)
# 保存裁剪后的圖片
cropped_img.save(new_file_path)
except Exception as e:
print(f"處理 {filename} 時出錯: {e}")
# 創(chuàng)建主窗口
root = tk.Tk()
root.title("批量處理JPG圖片")
# 創(chuàng)建按鈕
button = tk.Button(root, text="選擇文件夾", command=batch_process_images)
button.pack(pady=20)
# 運行主循環(huán)
root.mainloop()