打包EXE代码:
import os
import tkinter as tk
from tkinter import filedialog, messagebox
from PIL import Image
def process_images():
# 初始化 Tkinter 并隐藏主窗口
root = tk.Tk()
root.withdraw()
# 1. 弹出对话框选择 mask.png 文件
mask_path = filedialog.askopenfilename(
title="第一步:请选择你的 mask.png 文件",
filetypes=[("PNG图片", "*.png")]
)
if not mask_path:
return
# 2. 弹出对话框选择 JPG 图片所在的目录
folder_path = filedialog.askdirectory(title="第二步:请选择包含 JPG 图片的文件夹")
if not folder_path:
return
target_size = (1800, 1264)
try:
# 加载 mask 并确保是 RGBA 模式
mask_img = Image.open(mask_path).convert("RGBA")
m_width, m_height = mask_img.size
processed_count = 0
# 遍历目标目录
for filename in os.listdir(folder_path):
if filename.lower().endswith(".jpg"):
full_path = os.path.join(folder_path, filename)
with Image.open(full_path) as jpg_img:
# A. 将 JPG 强制缩放为 1800 * 1264
# Image.LANCZOS 保证了缩放后的图片质量
jpg_resized = jpg_img.resize(target_size, Image.Resampling.LANCZOS).convert("RGBA")
# B. 创建一个全透明的底板 (1800 * 1264)
# 这一步是确保“四角透明”的关键,如果 mask 没盖住的地方就是全透明
output_canvas = Image.new("RGBA", target_size, (0, 0, 0, 0))
output_canvas.paste(jpg_resized, (0, 0))
# C. 计算居中对齐坐标并覆盖 mask
x = (target_size[0] - m_width) // 2
y = (target_size[1] - m_height) // 2
# 第三参数传入 mask_img 自身作为 Alpha 遮罩
output_canvas.paste(mask_img, (x, y), mask_img)
# D. 导出为 PNG
base_name = os.path.splitext(filename)[0]
save_path = os.path.join(folder_path, f"{base_name}_user.png")
output_canvas.save(save_path, "PNG")
processed_count += 1
messagebox.showinfo("处理成功", f"任务完成!\n处理文件夹:{folder_path}\n生成图片数量:{processed_count}")
except Exception as e:
messagebox.showerror("程序错误", f"处理过程中发生异常:\n{str(e)}")
if __name__ == "__main__":
process_images()
打包命令:
第二步:执行打包命令
将上面的代码保存为 process_tool.py,然后在该文件所在的目录下运行:
pyinstaller --onefile --noconsole process_tool.py
pyinstaller --onefile --noconsole --name "图片合成工具" --clean your_script_name.py
—onefile: 将所有库文件打包进一个单独的 .exe 中。
—noconsole: 运行时不弹出黑色的命令行窗口(适合有 GUI 的程序)。