代码
import tkinter as tk from tkinter import filedialog from PIL import Image import os def resize_and_fill_image(input_path, output_path, target_width, target_height): # 打开原始图片 image = Image.open(input_path) width, height = image.size # 计算新的尺寸,保持图片的宽高比 ratio = min(target_width / width, target_height / height) new_width = int(width * ratio) new_height = int(height * ratio) # 调整图片大小 resized_image = image.resize((new_width, new_height), Image.LANCZOS) # 创建一个新的空白图片,使用白色填充 result_image = Image.new("RGB", (target_width, target_height), (255, 255, 255)) # 计算粘贴的位置,使图片居中 x_offset = (target_width - new_width) // 2 y_offset = (target_height - new_height) // 2 # 将调整后的图片粘贴到新的空白图片上 result_image.paste(resized_image, (x_offset, y_offset)) # 保存处理后的图片 result_image.save(output_path) def batch_process_images(input_folder, output_folder, target_width, target_height): # 确保输出文件夹存在 if not os.path.exists(output_folder): os.makedirs(output_folder) # 遍历输入文件夹中的所有图片文件 for filename in os.listdir(input_folder): if filename.lower().endswith(('.png', '.jpg', '.jpeg')): input_path = os.path.join(input_folder, filename) output_path = os.path.join(output_folder, filename) resize_and_fill_image(input_path, output_path, target_width, target_height) def select_source_folder(): folder = filedialog.askdirectory() if folder: source_folder_entry.delete(0, tk.END) source_folder_entry.insert(0, folder) def select_target_folder(): folder = filedialog.askdirectory() if folder: target_folder_entry.delete(0, tk.END) target_folder_entry.insert(0, folder) def start_processing(): source_folder = source_folder_entry.get() target_folder = target_folder_entry.get() try: target_width = int(width_entry.get()) target_height = int(height_entry.get()) if source_folder and target_folder: batch_process_images(source_folder, target_folder, target_width, target_height) status_label.config(text="处理完成!") else: status_label.config(text="请选择源文件夹和目标文件夹。") except ValueError: status_label.config(text="请输入有效的宽度和高度值。") # 创建主窗口 root = tk.Tk() root.title("图片批量裁剪工具") # 源文件夹选择 source_folder_label = tk.Label(root, text="源文件夹:") source_folder_label.pack() source_folder_entry = tk.Entry(root, width=50) source_folder_entry.pack() source_folder_button = tk.Button(root, text="选择源文件夹", command=select_source_folder) source_folder_button.pack() # 目标文件夹选择 target_folder_label = tk.Label(root, text="目标文件夹:") target_folder_label.pack() target_folder_entry = tk.Entry(root, width=50) target_folder_entry.pack() target_folder_button = tk.Button(root, text="选择目标文件夹", command=select_target_folder) target_folder_button.pack() # 目标宽度和高度输入 width_label = tk.Label(root, text="目标宽度:") width_label.pack() width_entry = tk.Entry(root, width=10) width_entry.insert(0, "800") width_entry.pack() height_label = tk.Label(root, text="目标高度:") height_label.pack() height_entry = tk.Entry(root, width=10) height_entry.insert(0, "600") height_entry.pack() # 开始处理按钮 process_button = tk.Button(root, text="开始处理", command=start_processing) process_button.pack() # 状态显示 status_label = tk.Label(root, text="") status_label.pack() # 运行主循环 root.mainloop()
网友回复
python如何调用openai的api实现知识讲解类动画讲解视频的合成?
html如何直接调用openai的api实现海报可视化设计及文本描述生成可编辑海报?
f12前端调试如何找出按钮点击事件触发的那段代码进行调试?
abcjs如何将曲谱播放后导出mid和wav格式音频下载?
python如何将曲子文本生成音乐mp3或wav、mid文件
python中mp3、wav音乐如何转成mid格式?
js在HTML中如何将曲谱生成音乐在线播放并下载本地?
python如何实现在windows上通过键盘来模拟鼠标操作?
python如何给win10电脑增加文件或文件夹右键自定义菜单?
python如何将音乐mp3文件解析获取曲调数据?