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

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

C:\pythoncode\new\webp2jpeg.py

准备工作

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

bash 复制代码
pip install wxPython Pillow

编写GUI程序

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

python 复制代码
import os
import wx
from PIL import Image

class 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("请选择文件夹!")
            return

        webp_files = [f for f in os.listdir(folder_path) if f.endswith('.webp')]
        if not webp_files:
            self.status_text.SetLabel("文件夹中没有webp文件!")
            return

        for 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格式保存。

python 复制代码
def on_convert(self, event):
        folder_path = self.folder_picker.GetPath()
        if not folder_path:
            self.status_text.SetLabel("请选择文件夹!")
            return

        webp_files = [f for f in os.listdir(folder_path) if f.endswith('.webp')]
        if not webp_files:
            self.status_text.SetLabel("文件夹中没有webp文件!")
            return

        for 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编程或者处理图片格式转换的读者有所帮助!

相关推荐
明月_清风24 分钟前
FastAPI 从入门到实战:3 分钟构建高性能异步 API
后端·python·fastapi
bellus-31 分钟前
ubuntu26测试win10的ollama大模型性能
python
水木流年追梦32 分钟前
大模型入门-Reward 奖励模型训练
开发语言·python·算法·leetcode·正则表达式
JavaWeb学起来33 分钟前
Python学习教程(六)数据结构List(列表)
数据结构·python·python基础·python教程
liuyunshengsir1 小时前
PyTorch 动态量化(Dynamic Quantization)
人工智能·pytorch·python
电子云与长程纠缠1 小时前
UE5制作六边形包裹球体效果
开发语言·python·ue5
DFT计算杂谈1 小时前
KPROJ编译教程
java·前端·python·算法·conda
念恒123062 小时前
Python(循环中断)
开发语言·python
tsfy20032 小时前
Python 处理中文文件名的3个坑(附 Flask 上传解决函数)
开发语言·python·flask·文件上传·中文编码
AI技术控2 小时前
KV Cache 缓存机制的原理和应用:从 Transformer 推理到大模型服务优化
人工智能·python·深度学习·缓存·自然语言处理·transformer