用Python编写GUI程序实现WebP文件批量转换为JPEG格式

在Python编程中,经常会遇到需要处理图片格式的情况。最近,我遇到了一个有趣的问题:如何通过编写一个GUI程序来实现将WebP格式的图片批量转换为JPEG格式?在这篇博客中,我将分享我使用Python、wxPython模块和Pillow库实现这一功能的经验。

C:\pythoncode\new\webp2jpeg.py

准备工作

在开始编写代码之前,我们需要安装两个Python库:wxPython和Pillow。你可以使用pip命令进行安装:

pip install wxPython Pillow

编写GUI程序

首先,我们创建一个简单的GUI界面,包括一个文件夹选择器和一个转换按钮。用户可以通过文件夹选择器选择包含WebP格式图片的文件夹,然后点击转换按钮进行格式转换。

import os
import wx
from PIL import Imageclass ConverterFrame(wx.Frame):def __init__(self, parent, title):super(ConverterFrame, self).__init__(parent, title=title, size=(400, 200))self.panel = wx.Panel(self)self.folder_picker = wx.DirPickerCtrl(self.panel, message="选择要转换的文件夹",style=wx.DIRP_USE_TEXTCTRL)self.convert_button = wx.Button(self.panel, label="转换", size=(100, 30))self.convert_button.Bind(wx.EVT_BUTTON, self.on_convert)self.status_text = wx.StaticText(self.panel, label="等待选择文件夹...")self.status_text.Wrap(380)sizer = wx.BoxSizer(wx.VERTICAL)sizer.Add(self.folder_picker, 0, wx.EXPAND | wx.ALL, 10)sizer.Add(self.convert_button, 0, wx.ALIGN_CENTER | wx.TOP | wx.BOTTOM, 10)sizer.Add(self.status_text, 0, wx.ALIGN_CENTER | wx.ALL, 10)self.panel.SetSizer(sizer)def on_convert(self, event):folder_path = self.folder_picker.GetPath()if not folder_path:self.status_text.SetLabel("请选择文件夹!")returnwebp_files = [f for f in os.listdir(folder_path) if f.endswith('.webp')]if not webp_files:self.status_text.SetLabel("文件夹中没有webp文件!")returnfor webp_file in webp_files:webp_path = os.path.join(folder_path, webp_file)jpeg_path = os.path.splitext(webp_path)[0] + '.jpeg'try:im = Image.open(webp_path).convert('RGB')im.save(jpeg_path, 'jpeg')except Exception as e:print(f"转换文件 {webp_file} 出错:{str(e)}")self.status_text.SetLabel("转换完成!")if __name__ == '__main__':app = wx.App()frame = ConverterFrame(None, title="WebP转换器")frame.Show()app.MainLoop()

这段代码创建了一个名为`ConverterFrame`的wxPython窗口类,其中包含了文件夹选择器和转换按钮。当用户点击转换按钮时,程序会调用`on_convert`方法来进行实际的格式转换操作。

实现格式转换

在`on_convert`方法中,我们首先获取用户选择的文件夹路径,并检查是否存在WebP格式的图片文件。然后,我们使用Pillow库中的Image类来打开每个WebP文件,并将其转换为JPEG格式保存。

def on_convert(self, event):folder_path = self.folder_picker.GetPath()if not folder_path:self.status_text.SetLabel("请选择文件夹!")returnwebp_files = [f for f in os.listdir(folder_path) if f.endswith('.webp')]if not webp_files:self.status_text.SetLabel("文件夹中没有webp文件!")returnfor webp_file in webp_files:webp_path = os.path.join(folder_path, webp_file)jpeg_path = os.path.splitext(webp_path)[0] + '.jpeg'try:im = Image.open(webp_path).convert('RGB')im.save(jpeg_path, 'jpeg')except Exception as e:print(f"转换文件 {webp_file} 出错:{str(e)}")self.status_text.SetLabel("转换完成!")

这部分代码逻辑简单明了:遍历选定文件夹下所有的WebP文件,使用Pillow库将其转换为JPEG格式,并保存在同一目录下。

测试与运行

完成代码编写后,我们可以运行程序进行测试。当程序启动后,选择包含WebP文件的文件夹,点击转换按钮,程序将会批量转换所有的WebP格式图片为JPEG格式。

 结语

通过这个简单的GUI程序,我们实现了将WebP格式图片批量转换为JPEG格式的功能。这种方法不仅可以帮助我们处理大量图片文件,还可以提高工作效率。希望这篇博客对于想要学习Python GUI编程或者处理图片格式转换的读者有所帮助!

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

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

相关文章

linux系统离线安装nginx

perlnginx是一个高性能的http和反向代理服务器,并发能力很强,一般用来做负载均衡比较多,分布式系统开发中用作web服务器。 一、下载 地址:nginx: download 我们下载这个稳定版本 二、环境依赖检查 nginx安装需要很多外部依赖&…

python开发poc,fofa爬虫批量化扫洞

学习使用python做到批量化的漏洞脚本 1.通过fofa搜索结果来采集脚本 2.批量化扫描漏洞 ---glassfish存在任意文件读取在默认48484端口,漏洞验证的poc为: "glassfish" && port"4848" && country"CN" http://loca…

Sybase ASE中的char(N)的坑以及与PostgreSQL的对比

1背景 昨天,一朋友向我咨询Sybase ASE中定长字符串类型的行为,说他们的客户反映,同样的char类型的数据,通过jdbc来查,Sybase库不会带空格,而PostgreSQL会带。是不是这样的?他是PostgreSQL的专业大拿,但因为他手头没有现成的Sybase ASE环境,刚好我手上有,便于一试。 …

Python实现读取dxf文件的所有字符

Python实现读取dxf文件的所有字符 import ezdxfdef read_dxf_and_print_text(filename):# 加载DXF文件doc ezdxf.readfile(filename)# 遍历所有的实体for entity in doc.entities:# 检查实体是否是TEXT、MTEXT或DIMENSIONif isinstance(entity, ezdxf.entities.Text):print(f…

计算机视觉——图像特征提取D2D先描述后检测特征提取算法原理

概述 局部特征提取是计算机视觉中的一个重要任务,它旨在从图像中提取出能够代表图像局部结构和外观信息的特征。这些特征通常用于图像匹配、物体识别、三维重建、跟踪和许多其他应用。传统方法,如尺度不变特征变换(SIFT)&#xf…

使用R语言计算矩形分布(均匀分布)并绘制图形

理论部分 矩形分布(均匀分布),是指在某一区间内,随机变量取任何值的概率都是相同的。这种分布的概率密度函数在一个特定的区间内是一个常数,因此其图形呈现出一个矩形的形状,故得名为“矩形分布”。在概率…

【Spring进阶系列丨第八篇】Spring整合junit 面向切面编程(AOP)详解

文章目录 一、Spring整合junit1.1、导入spring整合junit的jar1.2、在测试类上添加注解1.3、说明 二、面向切面编程(AOP)2.1、问题引出2.2、AOP2.2.1、概念2.2.2、作用2.2.3、优势2.2.4、实现方式2.2.5、专业术语2.2.5.1、连接点2.2.5.2、切入点2.2.5.3、通知/增强2.2.5.4、织入…

5款最值得推荐的电脑监控软件丨高人气甄选

在企业和学校等场所,电脑监控软件被广泛应用于员工或学生的行为管理。 通过监控软件,管理者可以了解员工或学生的学习和工作情况,及时发现并纠正不当行为,提高工作效率和学习效果。同时,这类软件还可以用于保护企业机…

AI概念普及-LangChain

文章目录 概念产品架构核心特性核心组件使用场景其他资源开发支持结论Langchain详细介绍LangChain的具体实现原理LangChain如何与其他大型语言模型(LLM)集成,有哪些具体的接口或协议?LangChain的性能表现和优化策略有哪些&#xf…

【多线程】线程(线程的概念+线程的创建)

文章目录 线程一、线程的概念1.引入线程的目的2.什么叫线程(Thread)1.线程的特点:2.进程和线程的区别(面试题):3.Java的多线程编程 二、创建线程1.继承Thread重写run入口方法:使用jconsolesleep…

Games101-光线追踪(加速结构)

Bounding Volumes 包围盒:用一个简单形状把物体包围起来,如果物体连包围盒都无法碰撞,一定无法碰撞包围盒内的物体 将长方体理解成三个不同对面形成的交集,一定是在x,y,z轴上的范围。没有旋转 Ray Inters…

适用于 Windows 10 的 10 大免费数据恢复软件

数据丢失可能是一场噩梦,尤其是在涉及重要文件和文档时。无论是由于意外删除、系统崩溃还是病毒攻击,找到适合 Windows 10 的文件夹恢复软件都可以在恢复丢失的数据方面发挥重要作用。在本指南中,我们将探索适用于 Windows 10 用户的 10 大免…

mysql解锁表及查看表是否被锁

1、查进程,查找被锁表的那个进程的ID show processlist; 2、通过查询结果,找到要杀掉的进程,kill掉锁表的进程ID kill id; 3、查询是否锁表 show OPEN TABLES where In_use > 0; 1.delete------ 是逐行删除速度极慢,不适合…

【退役之重学Java】pom文件没啥问题但报红

复制过来的pom文件,有几处版本号报红 刚开始以为是版本号的问题,但是按道理从大佬那里复制过来的,应该不会有问题,还是检查了一下: 把项目压缩发给师傅,师傅哪里没报错好吧,我已经猜到了为什么……

MySQL操作DDL

目录 1.概述 2.数据库的增删改查 3.表的增删改查 3.1.创建和查看表结构 3.2.修改表 3.3.查看所有的表 3.4.删除表 4.用户 5.DDL在实际应用场景中的作用 5.1.数据库设计 5.2.数据库维护 ​​​​​​​5.3.数据库迁移或重置 ​​​​​​​5.4.优化性能 ​​​​​…

cesium 添加动态波纹效果 圆形扩散效果 波纹材质

一、扩展材质 /*** 水波纹扩散材质* param {*} options* param {String} options.color 颜色* param {Number} options.duration 持续时间 毫秒* param {Number} options.count 波浪数量* param {Number} options.gradient 渐变曲率*/function CircleWaveMaterialProperty(opt…

网络学习学习笔记

NETEBASE学习笔记 一.VRP系统1.四种视图模式2.基础命令 二.TCP/IP1.五层模型 一.VRP系统 1.四种视图模式 (1)< Huawei > 用户视图 【查看运行状态】 (2)[Huawei] 系统视图 【配置设备的系统参数】 system-view /sys 进入系统视图 CtrlZ/return 直接返回用户视图 (3)[Hua…

【金句推荐】适合写进摘抄本的优美句子

1.人间骄阳刚好&#xff0c;风过林梢&#xff0c;彼时他们正当年少。 2.这路遥马急的人间渐行、渐远、渐无声&#xff0c;看淡若清风的现世且听、且吟、且从容。 3.一个能够升起月亮的身体&#xff0c;必然驮住了无数次日落。 4.并不可否认&#xff0c;生活磨掉了我们一部分…

数学建模-------MATLAB分支循环断点调试

1.if语句 &#xff08;1&#xff09;分段函数的引入&#xff08;这里的数据表示的是分数的不同区间对应的等级&#xff09; (1)这个就是一个十分简单的if语句&#xff0c;无论是if还是elseif后面都是不能添加任何分号的&#xff0c;这个例子就是一个分段的函数&#xff0c;在不…

mac/win使用pyinstaller打包app/exe文件,活着执行脚本,双击运行

&#x1f338; 踩坑记录 python环境最好使用虚拟环境&#xff0c;推荐使用conda管理&#xff0c;并且若本地有python环境&#xff0c;不要使用和 本地环境版本 相同的虚拟环境 这里踩坑较多&#xff0c;已经记不清楚注意点 虚拟环境python版本不要和本地环境一样 mac/win只能…