【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.mzph.cn/news/663480.shtml

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

相关文章

Springboot集成Camunda并完成一条流程实例

💖专栏简介 ✔️本专栏将从Camunda(卡蒙达) 7中的关键概念到实现中国式工作流相关功能。 ✔️文章中只包含演示核心代码及测试数据,完整代码可查看作者的开源项目snail-camunda ✔️请给snail-camunda 点颗星吧😘 💖设计流程定…

Python 生成图片验证码

图片验证码(CAPTCHA)是一种区分用户是计算机还是人的公共全自动程序。这种验证码通常以图片的形式出现,其中包含一些扭曲的字符或对象,用户需要识别这些字符或对象并输入正确的答案以通过验证。 通常情况下,图片验证码…

网络攻防模拟与城市安全演练 | 图扑数字孪生

在数字化浪潮的推动下,网络攻防模拟和城市安全演练成为维护社会稳定的不可或缺的环节。基于数字孪生技术我们能够在虚拟环境中进行高度真实的网络攻防模拟,为安全专业人员提供实战经验,从而提升应对网络威胁的能力。同时,在城市安…

linux免密登录的实现

ssh免密登录使用方便,关键没有了口令验证反倒规避了暴力破解或者被探测的风险。配置得当,使用ssh免密登录更加安全。在生产环境中应用和数据库服务器之间互相设置后使用方便,并且在第三方人员配置使用时不用告知对方密码。 第一步、ssh登录发…

区块链赋能编程:开启数字世界的新篇章

区块链,一种去中心化、分布式账本技术,正在以其独特的优势,为编程领域带来新的变革。 编程与区块链的结合 编程是构建数字世界的基础,而区块链则为数字世界提供了一种更加安全、可靠的信任机制。将两者结合,可以创造…

OpenJudge7084迷宫问题

迷宫问题 题目背景 定义一个二维数组: int maze[5][5] {0, 1, 0, 0, 0,0, 1, 0, 1, 0,0, 0, 0, 0, 0,0, 1, 1, 1, 0,0, 0, 0, 1, 0, };题目描述 它表示一个迷宫,其中的1表示墙壁,0表示可以走的路,只能横着走或竖着走&#xf…

【Vue3】源码探索之旅:compiler-core之parseChildren函数(二)

简言 parseChildren函数是在baseParse函数中作为createRoot函数的子节点参数传入的,今天来探索下parseChildren函数。 parseChildren在 compiler-core/src/parse.ts文件内。 parseChildren 这个函数就是用来解析模板字符串内容的 ,里面有个while循环…

常见code review问题

空值:值为null导致空指针异常,参数字符串含有前导或后缀空格没有Trim导致查询为空,建议添加空值检测,在参数入口统一做trim未捕获的异常:调用API接口、库函数或系统服务时,一定要添加防护,做防御…

CSS局限属性contain:优化渲染性能的利器

CSS局限属性contain:优化渲染性能的利器 在网页开发中,优化渲染性能是一个重要的目标。CSS局限属性contain是一个强大的工具,可以帮助我们提高网页的渲染性能。本文将介绍contain属性的基本概念、用法和优势,以及如何使用它来优化…

docker-学习-4

docker学习第四天 docker学习第四天1. 回顾1.1. 容器的网络类型1.2. 容器的本质1.3. 数据的持久化1.4. 看有哪些卷1.5. 看卷的详细信息 2. 如何做多台宿主机里的多个容器之间的数据共享2.1. 概念2.2. 搭NFS服务器实现多个容器之间的数据共享的详细步骤2.3. 如果是多台机器&…

什么是war包?war包该怎么运行?

什么是war包?war包该怎么运行? 很多学习 java 的小伙伴都听过 jar 包,但未必听说过 war 包。小编学习了多年的 java,也是在某次期末作业中老师要求打 war 包提交作业的时候才知道有这种东西,为此还对怎么打 war 包和 …

web应用课——(第二讲:CSS)

目录 一、实战项目一:Acwing名片 二、实战项目二:Bilibili名片 三、样式定义方式 四、选择器 五、颜色 六、文本 七、字体 八、背景 九、边框 十、元素展示格式 十一、内边距与外边距 十二、盒子模型 十三、位置 十四、浮动 十五、flex布…

T113-Pro的buildroot添加gdisk ( GPT disks )出现gptfdisk needs a toolchain w/ C++的解决方法

问题背景: 最近入手了百问网的全志T113-Pro,用Emmc启动发现一张32GB的SD卡在烧录了百问网镜像 100ask-t113-pro_sdcard.img 的系统后,仅有200多M的存储空间。第一时间上百问网论坛看是否有板友也出现类似情况,发现了一个帖子正是描…

幻兽帕鲁能在Mac上运行吗?幻兽帕鲁Palworld新手攻略

幻兽帕鲁能在Mac上运行吗? 《幻兽帕鲁》目前还未正式登陆Mac平台,不过通过一些方法是可以让游戏在该平台运行的。 虽然游戏不能在最高配置下运行,但如果你安装了CrossOver这个软件,就可以玩了。这是为Mac、Linux和ChromeOS等设计…

2024最新版IntelliJ IDEA安装使用指南

2024最新版IntelliJ IDEA安装使用指南 Installation and Usage Guide to the Latest JetBrains IntelliJ IDEA Community Editionn in 2024 By JacksonML JetBrains公司开发的IntelliJ IDEA一经问世,就受到全球Java/Kotlin开发者的热捧。这款集成开发环境&#xf…

MySQL中的多表查询语句

一、什么是多表查询 在了解多表查询之前,我们先看一下什么是单表查询。 select * from A 那什么是多表查询呢? select * from A,B 这是初学者比较容易理解的多表查询,就是直接查询两张表的字段,当然,星号可以改为对应的…

react 实现点击其他地方,隐藏列表(点击元素外)

前言: 我们经常封装一些自己的下拉列表组件 或者 弹窗组件。一般 点击按钮显示 列表或 弹窗。再次点击 隐藏或关闭,但 ui库里的下拉列表,点击除了自己本身也能实现隐藏对应的列表。下面我就给大家一个实现思路。 弹窗组件可以用 React Port…

Spring: 实体类转换工具总结

文章目录 一、MapStruct1、介绍2、原理3、使用4、问题处理(1)IDEA编译报错:NullPointerException 一、MapStruct 1、介绍 MapStruct是一个实体类属性映射工具,通过注解的方式实现将一个实体类的属性值映射到另外一个实体类中。在…

torch.sign()详解

torch.sign()是pytorch中的一个函数,用于计算输入张量的元素的符号。 具体地说,torch.sign()函数会返回一个新的张量,其中的元素是输入张量中对应元素的符号。如果输入张量的元素为正数,则对应位置的输出张量元素为1;…

unity3d的海盗王白银城演示

这是一个外网上的下载的海盗王unity3d制作的白银城演示场景。 地图只含有白银城区,没有野外和怪物。 当然也没有服务器端的。 我对灯光、摄像头、天空背景等做过调整,使它显示起来比较鲜丽。 它的模型和贴图是直接拿了海盗的,没有做过优化调整…