python图片脚本1-批量处理图片尺寸(详细注释+GUI界面+exe可执行文件)

前言

本文介绍一个用python第三方库pillow写的批量处理图片尺寸的脚本,以及脚本对应的使用tkinter库写的GUI界面并把它打包成exe可执行文件,打包成可执行文件的好处就是它支持多种操作系统,如 Windows、Linux 和 Mac OS 等。不了解pillow库和tkinter库的可以看我之前的文章,具体在下面的导航区域。

导航

pillow库的使用篇

Tkiner库的使用篇

图片脚本篇

源码

批量处理图片尺寸脚本源码

from PIL import Image # 图片处理模块
import os # 文件管理模块
"""
函数参数详解:
:param old_images_path: 图片的原来的路径  
:param new_iamges_path: 图片新的路径    
:param new_width: 图片新的宽度   
:param new_height: 图片新的高度   
"""
# 定义图片调整大小的函数
def resize_image(old_images_path, new_iamges_path,new_width, new_height):
    # 如果没有指定的文件夹,则创建文件夹
    if not os.path.exists(new_iamges_path):
        os.makedirs(new_iamges_path)

    # 遍历文件夹中的所有图片
    for file in os.listdir(old_images_path):
        print(f"{file}")
        # 构造图片的完整路径
        old_file_path = os.path.join(old_images_path, file)
        # 构造图片的新路径
        new_file_path = os.path.join(new_iamges_path, file)
        try:
            # 打开图片
            with Image.open(old_file_path) as img:
                # 调整图片尺寸
                img_resized = img.resize((new_width, new_height))
                img_resized.save(new_file_path)
        except Exception as e:
            print(f"Error processing {file}: {e}")

# 原文件夹路径
old_images_path = '../../images'
# 新文件夹路径
new_iamges_path = './output2'
# 新图片宽度
new_width = 224
# 新图片高度
new_height = 224
# 调用函数
resize_image(old_images_path,new_iamges_path, new_width, new_height)

效果

在这里插入图片描述

GUI界面源码

import os # 文件管理模块
import tkinter as tk # GUI模块
from tkinter import filedialog, messagebox # 文件选择模块,消息提示模块
from PIL import Image # 图像处理模块

# 定义图片调整大小的函数
def resize_images(old_images_path, new_images_path, new_width, new_height):
    # 如果没有指定的文件夹,则创建文件夹
    if not os.path.exists(new_images_path):
        os.makedirs(new_images_path)
    # 遍历文件夹中的所有图片
    for file in os.listdir(old_images_path):
        print(f"Processing {file}")
        # 构造图片的完整路径
        old_file_path = os.path.join(old_images_path, file)
        # 构造新图片的完整路径
        new_file_path = os.path.join(new_images_path, file)
        try:
            # 打开图片
            with Image.open(old_file_path) as img:
                # 调整图片尺寸
                img_resized = img.resize((new_width, new_height))
                img_resized.save(new_file_path)
        except Exception as e:
            messagebox.showerror(f"Error processing {file}", str(e))

# 调整图片尺寸的按钮点击事件
def on_resize_button_click():
    # 获取输入框中的值
    old_images_path = entry_old_path.get()
    new_images_path = entry_new_path.get()
    try:
        # 将输入框中的值转换为整数
        new_width = int(entry_width.get())
        new_height = int(entry_height.get())
    except ValueError:
        # 如果输入框中的值不是整数,则弹出错误提示框并返回
        messagebox.showerror("提示", "宽和高必须是整数")
        return
    # 检查输入框中的路径是否有效
    if not os.path.isdir(old_images_path):
        # 如果输入框中的路径不是有效目录,则弹出错误提示框并返回
        messagebox.showerror("提示", "路径无效")
        return
    # 调用图片调整函数
    resize_images(old_images_path, new_images_path, new_width, new_height)
    # 弹出成功提示框
    messagebox.showinfo("Success", "图片尺寸调整成功")


# 创建主窗口
root = tk.Tk()
# 设置窗口标题
root.title("图片尺寸调整工具")

# 创建并放置标签和输入框
tk.Label(root, text="储存原图片的文件夹:").grid(row=0, column=0, padx=10, pady=10)
# 创建输入框并放置
entry_old_path = tk.Entry(root, width=50)
# 设置输入框的位置
entry_old_path.grid(row=0, column=1, padx=10, pady=10)
# 设置按钮点击事件,选择文件夹并将路径插入输入框,如果输入框已有内容,则先清空,再插入,否则直接插入,使用lambda表达式简化代码,
tk.Button(root, text="浏览",
          command=lambda: entry_old_path.delete(0, tk.END) or entry_old_path.insert(0, filedialog.askdirectory())).grid(
    row=0, column=2, padx=10, pady=10)
# 创建并放置标签和输入框
tk.Label(root, text="储存新图片的文件夹:").grid(row=1, column=0, padx=10, pady=10)
# 创建输入框并放置
entry_new_path = tk.Entry(root, width=50)
# 设置输入框的位置
entry_new_path.grid(row=1, column=1, padx=10, pady=10)
# 设置按钮点击事件,选择文件夹并将路径插入输入框,如果输入框已有内容,则先清空,再插入,否则直接插入,使用lambda表达式简化代码,
tk.Button(root, text="浏览",
          command=lambda: entry_new_path.delete(0, tk.END) or entry_new_path.insert(0, filedialog.askdirectory())).grid(
    row=1, column=2, padx=10, pady=10)
# 创建并放置标签和输入框
tk.Label(root, text="新的宽度:").grid(row=2, column=0, padx=10, pady=10)
# 创建输入框并放置
entry_width = tk.Entry(root, width=10)
# 设置输入框的位置
entry_width.grid(row=2, column=1, padx=10, pady=10)
# 创建并放置标签和输入框
tk.Label(root, text="新的高度:").grid(row=3, column=0, padx=10, pady=10)
# 创建输入框并放置
entry_height = tk.Entry(root, width=10)
# 设置输入框的位置
entry_height.grid(row=3, column=1, padx=10, pady=10)
# 创建并放置调整尺寸按钮
resize_button = tk.Button(root, text="运行", command=on_resize_button_click)
# 设置按钮的位置
resize_button.grid(row=4, column=0, columnspan=3, pady=20)
# 运行主循环
root.mainloop()

效果

在这里插入图片描述

打包成.exe可执行文件

需要安装python第三方库pyinstaller

pip install pyinstaller

在文件所在目录的终端输入下面的命令,就可以把把刚刚的GUI界面打包成一个.exe可执行文件。

pyinsataller filename

filename是要打包的源文件的名称
比如我要打包我写的批量调整图片尺寸的脚本打包成.exe可执行文件,可以在终端使用下面的命令:

pyinstaller -F -n iamgeSizeModify test_1.py  

-F:表示生成单个可执行文件(将所有依赖项打包到一个文件中)
-n:表示将生成的可执行文件命名为iamgeSizeModify
test_1.py:源文件

效果

在这里插入图片描述
点击运行那个iamgeSizeModify.exe就可以运行出GUI界面了。

共勉

永远不要提前焦虑,生活无非就是见招拆招!

博客

  • 本人是一个渗透爱好者,不时会在微信公众号(laity的渗透测试之路)更新一些实战渗透的实战案例,感兴趣的同学可以关注一下,大家一起进步。
  • 之前在公众号发布了一个kali破解WiFi的文章,感兴趣的同学可以去看一下,在b站(up主:laity1717)也发布了相应的教学视频
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值