【Python】一个简单的小案例:实现批量修改图片格式

1.代码

import os
from tkinter import Tk, Button
from PIL import Imagedef check_and_create_folders():# 获取当前目录current_directory = os.getcwd()# 定义文件夹名称folders_to_check = ["JPG", "PNG"]for folder_name in folders_to_check:folder_path = os.path.join(current_directory, folder_name)# 检查文件夹是否存在if os.path.exists(folder_path):print(f"文件夹'{folder_name}'已存在。")else:# 如果不存在则创建文件夹os.makedirs(folder_path)print(f"文件夹'{folder_name}'已创建。")def jpg_to_png():source_folder = os.path.join(os.getcwd(), "JPG")destination_folder = os.path.join(os.getcwd(), "PNG")# 创建PNG文件夹(如果不存在)os.makedirs(destination_folder, exist_ok=True)for filename in os.listdir(source_folder):if filename.lower().endswith(".jpg"):# 读取图像image_path = os.path.join(source_folder, filename)try:img = Image.open(image_path)# 生成PNG文件名png_filename = os.path.splitext(filename)[0] + ".png"png_path = os.path.join(destination_folder, png_filename)# 保存为PNG格式img.save(png_path, "PNG")print(f"转换完成: {filename} -> {png_filename}")except Exception as e:print(f"无法转换 {filename}: {str(e)}")def png_to_jpg():source_folder = os.path.join(os.getcwd(), "PNG")destination_folder = os.path.join(os.getcwd(), "JPG")# 创建JPG文件夹(如果不存在)os.makedirs(destination_folder, exist_ok=True)for filename in os.listdir(source_folder):if filename.lower().endswith(".png"):# 读取图像image_path = os.path.join(source_folder, filename)try:img = Image.open(image_path)# 生成JPG文件名jpg_filename = os.path.splitext(filename)[0] + ".jpg"jpg_path = os.path.join(destination_folder, jpg_filename)# 保存为JPG格式img.convert("RGB").save(jpg_path, "JPEG")print(f"转换完成: {filename} -> {jpg_filename}")except Exception as e:print(f"无法转换 {filename}: {str(e)}")def create_gui():root = Tk()root.title("文件格式转换工具")root.geometry("400x300")check_and_create_folders()button_width = 15button_height = 1# 创建按钮并添加事件监听器jpg_to_png_button = Button(root, text="JPG转PNG", command=jpg_to_png, width=button_width, height=button_height)jpg_to_png_button.place(relx=0.5, rely=0.3, anchor="center")png_to_jpg_button = Button(root, text="PNG转JPG", command=png_to_jpg, width=button_width, height=button_height)png_to_jpg_button.place(relx=0.5, rely=0.6, anchor="center")# 运行GUI主循环root.mainloop()if __name__ == "__main__":create_gui()

2.功能

1.create_gui()

该函数用于创建一个简单的图形用户界面(GUI)。具体功能如下:

  1. 创建一个Tk窗口对象,即主窗口。
  2. 设置主窗口的标题为“文件格式转换工具”。
  3. 设置主窗口的大小为宽400高300。
  4. 调用check_and_create_folders函数,该函数用于检查并在当前目录下创建文件夹“JPG”和“PNG”。
  5. 定义按钮的宽度为15,高度为1。
  6. 创建两个按钮,分别是“JPG转PNG”和“PNG转JPG”,并分别绑定点击事件(command)为jpg_to_pngpng_to_jpg函数。
  7. 使用place方法设置按钮的位置,使其在窗口中居中显示。
  8. 启动GUI的主循环,使窗口保持打开状态,等待用户交互。

2.check_and_create_folders()

该函数主要作用是检查并在当前工作目录下创建两个文件夹:“JPG”和“PNG”。具体功能描述如下:

  1. 获取当前工作目录,使用os.getcwd()
  2. 定义一个包含文件夹名称的列表 folders_to_check,其中包括 "JPG" 和 "PNG"。
  3. 遍历 folders_to_check 中的每个文件夹名称。
  4. 使用 os.path.join 构建每个文件夹的完整路径。
  5. 使用 os.path.exists 检查文件夹是否已经存在。
  6. 如果文件夹已经存在,则打印一条消息表示文件夹已存在。
  7. 如果文件夹不存在,则使用 os.makedirs 创建文件夹,并打印一条消息表示文件夹已创建。

3.jpg_to_png()

该函数主要功能是将当前目录下文件夹“JPG”中所有 .jpg 格式的图片转换为 .png 格式,并将转换后的图片保存到当前目录下的“PNG”文件夹中。具体功能描述如下:

  1. 构建源文件夹路径为当前工作目录下的“JPG”文件夹。
  2. 构建目标文件夹路径为当前工作目录下的“PNG”文件夹。
  3. 使用 os.makedirs 创建“PNG”文件夹(如果不存在)。
  4. 遍历源文件夹中所有文件。
  5. 对于每个 .jpg 格式的文件,读取图像。
  6. 使用 Image.open 打开图像文件。
  7. 生成对应的 .png 文件名。
  8. 将图像以 .png 格式保存到“PNG”文件夹中。
  9. 打印转换完成的信息,包括原文件名和新文件名。
  10. 如果在图像处理过程中发生异常,打印无法转换的错误信息。

4.png_to_jpg()

该函数主要功能是将当前目录下文件夹“PNG”中所有 .png 格式的图片转换为 .jpg 格式,并将转换后的图片保存到当前目录下的“JPG”文件夹中。具体功能描述如下:

  1. 构建源文件夹路径为当前工作目录下的“PNG”文件夹。
  2. 构建目标文件夹路径为当前工作目录下的“JPG”文件夹。
  3. 使用 os.makedirs 创建“JPG”文件夹(如果不存在)。
  4. 遍历源文件夹中所有文件。
  5. 对于每个 .png 格式的文件,读取图像。
  6. 使用 Image.open 打开图像文件。
  7. 生成对应的 .jpg 文件名。
  8. 将图像以 .jpg 格式保存到“JPG”文件夹中。
  9. 打印转换完成的信息,包括原文件名和新文件名。
  10. 如果在图像处理过程中发生异常,打印无法转换的错误信息。

3.效果

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/448601.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

AWTK 开源串口屏开发(9) - 用户和权限管理

用户管理和权限控制是一个常用的功能。在工业软件中,通常将用户分为几种不同的角色,每种角色有不同的权限,比如管理员、操作员和维护员等等。在 AWTK 串口屏中,内置基本的用户管理和权限控制功能,可以满足常见的需求。…

2024年美赛B题:寻找潜水器 Searching for Submersibles 思路模型代码解析

2024年美赛B题:寻找潜水器 Searching for Submersibles 思路模型代码解析 【点击最下方群名片,加入群聊,获取更多思路与代码哦~】 问题翻译 海上游轮迷你潜艇(MCMS)是一家位于希腊的公司,专门制造能够将人…

BEV感知(2)--转换模块

目录 一、2D到3D转换模块 1、LSS 2、Pseudo LiDAR 二、3D到2D转换模块 1、Explicit mapping 2、Implicit mapping 三、transformer相关 1、VIT 2、Swin Transformer 一、2D到3D转换模块 核心目的:由于将2D空间转换到BEV,所以我们要引入一个媒…

常用数据分析模型与方法

常用数据分析模型与方法 在进行数据分析过程中,通常需要使用各种模型来证明自己的分析观点,一是为了使自己的结论更具备说服力,二是让自己的论证过程更具备逻辑性和条理性。 FineBI 推出部分数据分析方法,帮助用户更好的使用 BI 进…

2024 RTE行业(实时互动行业)人才发展学习总结

解决方案 人才画像 开发者人才素质要求: 具备多个领域的技术知识注重团队合作,具备协作能力以用户为导向的用户体验意识具备创新思维和解决问题的能力需快速响应行业变化和持续的学习能力具备项目管理能力 学习和吸收新知识的渠道 RTE人才分类

十、Qt三维图表

一、Data Visualization模块概述 Data Visualization的三维显示功能主要有三种三维图形来实现,三各类的父类都是QAbstract3DGraph,从QWindow继承而来。这三类分别是:三维柱状图Q3DBar三维空间散点Q3DScatter三维曲面Q3DSurface 1、相关类的…

卸载Ubuntu双系统

卸载Ubuntu双系统 我们卸载Ubuntu双系统,可能出于以下原因: 1、Ubuntu系统内核损坏无法正常进入 2、Ubuntu系统分配空间不足,直接扩区较为复杂 3、以后不再使用Ubuntu,清理留出空间 123无论出于哪种原因,我们都是要…

TikTok赚钱又有新路子?TikTok选品有什么新秘籍?做对什么才能GMV破千万刀?

这一年,到底发生了什么? 上半年TikTok面临北美的严格审查和信息安全方面的质疑,但总算在9月有惊无险地打开了北美TikTok Shop这个“金匣子”,给跨境电商赛道带来新的增量机会,而东南亚市场虽在短暂停滞后迅速峰回路转…

pnpm安装以及管理多个nodejs版本

官网 https://pnpm.io/zh/ https://www.pnpm.cn/ nodejs安装包 https://nodejs.org/download/release/ windows安装 iwr https://get.pnpm.io/install.ps1 -useb | iex重新打开一个新的控制台,输入pnpm -v ubuntu下安装 curl -fsSL https://get.pnpm.io/insta…

多线程(进阶三:JUC)

一、Callable接口 二、reentrantLock 三、原子类 四、线程池 五、信号量 Semaphore 六、CountDownLatch JUC即java.utill.concurrent,里面放了一些多线程编程时有用的类,下面是里面的一些类。 一、Callable接口 1、创建线程的操作 多线程编程时&a…

Docker应用之daemon.json(一)

目录 问题复现原因分析解决步骤1.创建daemon.json2.国内镜像地址3.保存daemon.json4.重启docker服务5.查看镜像源问题小结官网docs提供的一个示例配置参数背景说明 问题复现 今天在用docker部署springboot项目时,出现JDK8依赖包下载失败, 原因分析 第一…

MySQL-----初识

一 SQL的基本概述 基本概述 ▶SQL全称: Structured Query Language,是结构化查询语言,用于访问和处理数据库的标准的计算机语言。SQL语言1974年由Boyce和Chamberlin提出,并首先在IBM公司研制的关系数据库系统SystemR上实现。 ▶美国国家标…