如何使用 python创建图片格式转换器
在本篇博客中,我们将通过一个简单的实例来展示如何使用 wxPython 创建一个图形用户界面(GUI)应用程序,用于将图片从一种格式转换为另一种格式。我们将通过以下几个步骤实现这一目标:
C:\pythoncode\new\imageconverttype.py
- 选择多个
.png文件。 - 选择目标文件类型(例如,
jpeg,gif,png,bmp,webp)。 - 点击“转换”按钮,将选择的文件转换为目标格式。
- 将转换后的文件保存到指定的文件夹中。
全部代码
import wx
import os
from PIL import Imageclass ImageConverter(wx.Frame):def __init__(self, *args, **kw):super(ImageConverter, self).__init__(*args, **kw)self.InitUI()def InitUI(self):panel = wx.Panel(self)vbox = wx.BoxSizer(wx.VERTICAL)# 选择文件按钮self.files_button = wx.Button(panel, label="选择图片文件")self.files_button.Bind(wx.EVT_BUTTON, self.on_select_files)# 显示选择的文件列表self.files_list = wx.ListBox(panel, size=(400, 150))# 选择转换后的文件类型self.target_format_choice = wx.Choice(panel, choices=["JPEG", "GIF", "PNG", "BMP", "WEBP"])self.target_format_choice.SetSelection(0) # 默认选择JPEG# 选择保存的文件夹self.output_folder_button = wx.Button(panel, label="选择保存文件夹")self.output_folder_button.Bind(wx.EVT_BUTTON, self.on_select_folder)# 显示选中的保存文件夹路径self.output_folder_text = wx.TextCtrl(panel, size=(400, 25), style=wx.TE_READONLY)# 转换按钮self.convert_button = wx.Button(panel, label="转换")self.convert_button.Bind(wx.EVT_BUTTON, self.on_convert)# 布局vbox.Add(self.files_button, flag=wx.EXPAND | wx.ALL, border=10)vbox.Add(self.files_list, flag=wx.EXPAND | wx.ALL, border=10)vbox.Add(self.target_format_choice, flag=wx.EXPAND | wx.ALL, border=10)vbox.Add(self.output_folder_button, flag=wx.EXPAND | wx.ALL, border=10)vbox.Add(self.output_folder_text, flag=wx.EXPAND | wx.ALL, border=10)vbox.Add(self.convert_button, flag=wx.EXPAND | wx.ALL, border=10)panel.SetSizer(vbox)self.SetSize((500, 400))self.SetTitle('图片格式转换器')self.Centre()self.Show(True)def on_select_files(self, event):with wx.FileDialog(self, "选择图片文件", wildcard="PNG files (*.png)|*.png",style=wx.FD_OPEN | wx.FD_MULTIPLE) as dlg:if dlg.ShowModal() == wx.ID_OK:paths = dlg.GetPaths()self.files_list.SetItems(paths)def on_select_folder(self, event):with wx.DirDialog(self, "选择保存文件夹", style=wx.DD_DEFAULT_STYLE) as dlg:if dlg.ShowModal() == wx.ID_OK:self.output_folder_text.SetValue(dlg.GetPath())def on_convert(self, event):# 获取选择的文件路径和目标格式selected_files = self.files_list.GetStrings()target_format = self.target_format_choice.GetStringSelection().lower()output_folder = self.output_folder_text.GetValue()if not selected_files or not output_folder:wx.MessageBox("请选择文件和目标文件夹", "错误", wx.ICON_ERROR)returnif target_format not in ["jpeg", "gif", "png", "bmp", "webp"]:wx.MessageBox("无效的目标格式", "错误", wx.ICON_ERROR)return# 转换每个文件for file in selected_files:try:# 打开图片with Image.open(file) as img:# 确定输出文件名base_name = os.path.splitext(os.path.basename(file))[0]output_path = os.path.join(output_folder, f"{base_name}.{target_format}")# 保存为目标格式img.convert("RGB").save(output_path, target_format.upper())wx.MessageBox(f"转换成功: {output_path}", "完成", wx.ICON_INFORMATION)except Exception as e:wx.MessageBox(f"转换失败: {file}\n错误: {str(e)}", "错误", wx.ICON_ERROR)if __name__ == '__main__':app = wx.App(False)ImageConverter(None)app.MainLoop()
准备工作
首先,确保你已经安装了 wxPython 和 Pillow(Python Imaging Library)。这两个库将分别用于创建界面和处理图片转换功能。
在命令行中使用 pip 安装:
pip install wxPython Pillow
wxPython:用于创建跨平台的桌面应用程序。Pillow:用于处理图像文件,如打开、转换格式、保存等。
代码实现
接下来,我们将通过代码实现上述功能。
import wx
import os
from PIL import Imageclass ImageConverter(wx.Frame):def __init__(self, *args, **kw):super(ImageConverter, self).__init__(*args, **kw)self.InitUI()def InitUI(self):panel = wx.Panel(self)vbox = wx.BoxSizer(wx.VERTICAL)# 选择文件按钮self.files_button = wx.Button(panel, label="选择图片文件")self.files_button.Bind(wx.EVT_BUTTON, self.on_select_files)# 显示选择的文件列表self.files_list = wx.ListBox(panel, size=(400, 150))# 选择转换后的文件类型self.target_format_choice = wx.Choice(panel, choices=["JPEG", "GIF", "PNG", "BMP", "WEBP"])self.target_format_choice.SetSelection(0) # 默认选择JPEG# 选择保存的文件夹self.output_folder_button = wx.Button(panel, label="选择保存文件夹")self.output_folder_button.Bind(wx.EVT_BUTTON, self.on_select_folder)# 显示选中的保存文件夹路径self.output_folder_text = wx.TextCtrl(panel, size=(400, 25), style=wx.TE_READONLY)# 转换按钮self.convert_button = wx.Button(panel, label="转换")self.convert_button.Bind(wx.EVT_BUTTON, self.on_convert)# 布局vbox.Add(self.files_button, flag=wx.EXPAND | wx.ALL, border=10)vbox.Add(self.files_list, flag=wx.EXPAND | wx.ALL, border=10)vbox.Add(self.target_format_choice, flag=wx.EXPAND | wx.ALL, border=10)vbox.Add(self.output_folder_button, flag=wx.EXPAND | wx.ALL, border=10)vbox.Add(self.output_folder_text, flag=wx.EXPAND | wx.ALL, border=10)vbox.Add(self.convert_button, flag=wx.EXPAND | wx.ALL, border=10)panel.SetSizer(vbox)self.SetSize((500, 400))self.SetTitle('图片格式转换器')self.Centre()self.Show(True)def on_select_files(self, event):with wx.FileDialog(self, "选择图片文件", wildcard="PNG files (*.png)|*.png",style=wx.FD_OPEN | wx.FD_MULTIPLE) as dlg:if dlg.ShowModal() == wx.ID_OK:paths = dlg.GetPaths()self.files_list.SetItems(paths)def on_select_folder(self, event):with wx.DirDialog(self, "选择保存文件夹", style=wx.DD_DEFAULT_STYLE) as dlg:if dlg.ShowModal() == wx.ID_OK:self.output_folder_text.SetValue(dlg.GetPath())def on_convert(self, event):# 获取选择的文件路径和目标格式selected_files = self.files_list.GetStrings()target_format = self.target_format_choice.GetStringSelection().lower()output_folder = self.output_folder_text.GetValue()if not selected_files or not output_folder:wx.MessageBox("请选择文件和目标文件夹", "错误", wx.ICON_ERROR)returnif target_format not in ["jpeg", "gif", "png", "bmp", "webp"]:wx.MessageBox("无效的目标格式", "错误", wx.ICON_ERROR)return# 转换每个文件for file in selected_files:try:# 打开图片with Image.open(file) as img:# 确定输出文件名base_name = os.path.splitext(os.path.basename(file))[0]output_path = os.path.join(output_folder, f"{base_name}.{target_format}")# 保存为目标格式img.convert("RGB").save(output_path, target_format.upper())wx.MessageBox(f"转换成功: {output_path}", "完成", wx.ICON_INFORMATION)except Exception as e:wx.MessageBox(f"转换失败: {file}\n错误: {str(e)}", "错误", wx.ICON_ERROR)if __name__ == '__main__':app = wx.App(False)ImageConverter(None)app.MainLoop()
代码解析
-
界面设计:使用
wx.Panel和wx.BoxSizer来构建应用的布局。- 选择文件按钮:通过
wx.FileDialog让用户选择多个.png文件。 - 目标文件类型选择:使用
wx.Choice让用户选择目标格式(如 JPEG, GIF, PNG, BMP, WEBP)。 - 保存文件夹选择:通过
wx.DirDialog让用户选择一个文件夹来保存转换后的文件。 - 转换按钮:点击按钮后,将所选文件转换并保存到指定文件夹。
- 选择文件按钮:通过
-
图片转换:使用
Pillow库来处理图片的转换。我们通过Image.open()打开图片,调用convert("RGB")方法以确保图像可以转换为目标格式,然后调用save()保存为新的格式。 -
错误处理:如果文件转换失败或用户未选择文件、文件夹等,程序会弹出错误消息框,提示用户。
运行和测试
- 启动程序后,点击 “选择图片文件” 按钮,选择要转换的
.png文件。 - 选择目标格式(如
jpeg,gif,bmp等)。 - 点击 “选择保存文件夹” 按钮,选择保存文件的目录。
- 最后,点击 “转换” 按钮,程序会将选择的图片转换为目标格式,并保存在指定文件夹中。
结果如下

相关文章:
如何使用 python创建图片格式转换器
在本篇博客中,我们将通过一个简单的实例来展示如何使用 wxPython 创建一个图形用户界面(GUI)应用程序,用于将图片从一种格式转换为另一种格式。我们将通过以下几个步骤实现这一目标: C:\pythoncode\new\imageconvertty…...
命令行之巅:Linux Shell编程的至高艺术(上)
文章一览 前言一、shell概述1.1 shell的特点和类型1.1.1 **shell的特点:**1.1.2 常用shell类型 1.2 shell脚本的建立和执行1.2.1 建立shell脚本1.2.2 执行shell脚本的方式1.2.3 shell程序实例 二、shell变量与算数运算2.1 简单shell变量2.1.1 简单变量定义和赋值2.1…...
【gulp】gulp 的基本使用
gulp 是一个基于node的自动化打包构建工具,前端开发者可以使用它来处理常见任务: 创建项目 进入项目 npm init -ynpm i gulp -g (使用命令 gulp)npm i gulp -D # 开发依赖(前端工具都是开发依赖 本地安装 代…...
Linux 下处理 ^M 字符的最佳实践
Linux 下处理 ^M 字符的最佳实践 一、快速解决方案 按照优先级排序的三种解决方案: 1. 使用 dos2unix(推荐) # 安装 sudo apt-get install dos2unix # Ubuntu/Debian sudo yum install dos2unix # CentOS# 使用 dos2unix 文件名2. 使用 sed sed...
【优选算法】—复写零(双指针算法)
云边有个稻草人-CSDN博客 每天至少一道算法题,接着干,以额现在的实力想完成那个目标确实难。算法题确实烧脑,挺煎熬的,但脑子烧多了是不是就该好些了?。。。 记得那句话,必须有为成功付出代价的决心&#x…...
2024国赛A问题三和四
问题三 最小螺距单目标优化模型的建立 问题二考虑了在螺距固定的条件下计算舞龙队盘入的终止时间,问题三在第二问的基础提出了改变螺距的要求,即求解在螺距最小为多少时,龙头前把手能够沿着相应的螺线盘入到调头空间的边界。故可将其转换为…...
asp.net 高校学生勤工俭学系统设计与实现
博主介绍:专注于Java(springboot ssm 等开发框架) vue .net php python(flask Django) 小程序 等诸多技术领域和毕业项目实战、企业信息化系统建设,从业十五余年开发设计教学工作 ☆☆☆ 精彩专栏推荐订阅☆☆☆☆☆不然下次找…...
《计算机组成及汇编语言原理》阅读笔记:p116-p120
《计算机组成及汇编语言原理》学习第 7 天,p116-p120 总结,总计 5 页。 一、技术总结 1.CPU优化 (1)increase overall performance number 例如:16位电脑提升到32位电脑。 (2)multiprocessing One way to make computers more useful i…...
C# OpenCvSharp DNN 卡证检测矫正
目录 说明 效果 模型 项目 代码 下载 参考 说明 源码地址:https://modelscope.cn/models/iic/cv_resnet_carddetection_scrfd34gkps 在实人认证、文档电子化等场景中需要自动化提取卡证的信息,以便进一步做录入处理。这类场景通常存在两类问题&…...
Spring Boot 中 Map 的最佳实践
在Spring Boot中使用Map时,请遵循以下最佳实践: 1.避免在Controller中 直接使用Map。应该使用RequestBody 接收-个DTO对象或者 RequestParam接收参数,然后在Service中处 理Map。 2.避免在Service中 直接使用原始的Map。应该使用Autowired 注入-个专门…...
J-LangChain - 智能链构建
介绍 j-langchain是一个Java版的LangChain开发框架,旨在简化和加速各类大模型应用在Java平台的落地开发。它提供了一组实用的工具和类,使得开发人员能够更轻松地构建类似于LangChain的Java应用程序。 依赖 Maven <dependency><groupId>i…...
开源低代码平台-Microi吾码 打印引擎使用
引言 在开发中,会遇到很多记录的表单数据需要下载打印下来使用到线下各种应用场景中。在传统的方法中可能是需要先导出数据,然后将数据填入word表格中在打印下来。 但Microi吾码提供了一项新功能,便是打印引擎。打印引擎即可在线设计…...
【MySQL】索引 面试题
文章目录 适合创建索引的情况创建索引的注意事项MySQL中不适合创建索引的情况索引失效的常见情况 索引定义与作用 索引是帮助MySQL高效获取数据的有序数据结构,通过维护特定查找算法的数据结构(如B树),以某种方式引用数据…...
【高阶数据结构】AVL树
AVL树 1.AVL的概念2.AVL树的实现1.AVL树的结构2.AVL树的插入1.更新平衡因子2.旋转1.右单旋2.左单旋3.左右双旋4.右左双旋 3.AVL树的查找4.AVL树的平衡检测5.AVL树的性能分析6.AVL树的删除 3.总代码1.AVLTree.h2.Test.cpp 1.AVL的概念 AVL树是最先发明的自平衡⼆叉查找树&#…...
【Spring】基于XML的Spring容器配置——<bean>标签与属性解析
Spring框架是一个非常流行的应用程序框架,它通过控制反转(IoC)和依赖注入(DI)来简化企业级应用的开发。Spring容器是其核心部分,负责管理对象的创建、配置和生命周期。在Spring中,XML配置是一种…...
docker mysql5.7安装
一.更改 /etc/docker/daemon.json sudo mkdir -p /etc/dockersudo tee /etc/docker/daemon.json <<-EOF {"registry-mirrors": ["https://do.nark.eu.org","https://dc.j8.work","https://docker.m.daocloud.io","https:/…...
HDR视频技术之十一:HEVCH.265 的 HDR 编码方案
前文我们对 HEVC 的 HDR 编码优化技术做了介绍,侧重编码性能的提升。 本章主要阐述 HEVC 中 HDR/WCG 相关的整体编码方案, 包括不同应用场景下的 HEVC 扩展编码技术。 1 背景 HDR 信号一般意味着使用更多比特,一般的 HDR 信号倾向于使用 10…...
最新的强大的文生视频模型Pyramid Flow 论文阅读及复现
《PYRAMIDAL FLOW MATCHING FOR EFFICIENT VIDEO GENERATIVE MODELING》 论文地址:2410.05954https://arxiv.org/pdf/2410.05954 项目地址: jy0205/Pyramid-Flow: 用于高效视频生成建模的金字塔流匹配代码https://github.com/jy0205/Pyram…...
Effective C++ 条款 11:在 `operator=` 中处理“自我赋值”
文章目录 条款 11:在 operator 中处理“自我赋值”核心问题示例:使用地址比较示例:copy-and-swap 技术设计建议总结 条款 11:在 operator 中处理“自我赋值” 核心问题 自我赋值风险 如果赋值操作符没有处理自我赋值(…...
19、鸿蒙学习——配置HDC命令 环境变量
一、下载Command Line Tools 可参考上篇《鸿蒙学习——配置OHPM、hvigor环境变量》 二、配置hdc环境变量 hdc命令行工具用于HarmonyOS应用/元服务调试所需的工具,该工具存放在命令行工具自带的sdk下的toolchains目录中。为方便使用hdc命令行工具,请将…...
shell脚本--常见案例
1、自动备份文件或目录 2、批量重命名文件 3、查找并删除指定名称的文件: 4、批量删除文件 5、查找并替换文件内容 6、批量创建文件 7、创建文件夹并移动文件 8、在文件夹中查找文件...
安宝特方案丨XRSOP人员作业标准化管理平台:AR智慧点检验收套件
在选煤厂、化工厂、钢铁厂等过程生产型企业,其生产设备的运行效率和非计划停机对工业制造效益有较大影响。 随着企业自动化和智能化建设的推进,需提前预防假检、错检、漏检,推动智慧生产运维系统数据的流动和现场赋能应用。同时,…...
反射获取方法和属性
Java反射获取方法 在Java中,反射(Reflection)是一种强大的机制,允许程序在运行时访问和操作类的内部属性和方法。通过反射,可以动态地创建对象、调用方法、改变属性值,这在很多Java框架中如Spring和Hiberna…...
【决胜公务员考试】求职OMG——见面课测验1
2025最新版!!!6.8截至答题,大家注意呀! 博主码字不易点个关注吧,祝期末顺利~~ 1.单选题(2分) 下列说法错误的是:( B ) A.选调生属于公务员系统 B.公务员属于事业编 C.选调生有基层锻炼的要求 D…...
Spring数据访问模块设计
前面我们已经完成了IoC和web模块的设计,聪明的码友立马就知道了,该到数据访问模块了,要不就这俩玩个6啊,查库势在必行,至此,它来了。 一、核心设计理念 1、痛点在哪 应用离不开数据(数据库、No…...
HashMap中的put方法执行流程(流程图)
1 put操作整体流程 HashMap 的 put 操作是其最核心的功能之一。在 JDK 1.8 及以后版本中,其主要逻辑封装在 putVal 这个内部方法中。整个过程大致如下: 初始判断与哈希计算: 首先,putVal 方法会检查当前的 table(也就…...
SiFli 52把Imagie图片,Font字体资源放在指定位置,编译成指定img.bin和font.bin的问题
分区配置 (ptab.json) img 属性介绍: img 属性指定分区存放的 image 名称,指定的 image 名称必须是当前工程生成的 binary 。 如果 binary 有多个文件,则以 proj_name:binary_name 格式指定文件名, proj_name 为工程 名&…...
论文笔记——相干体技术在裂缝预测中的应用研究
目录 相关地震知识补充地震数据的认识地震几何属性 相干体算法定义基本原理第一代相干体技术:基于互相关的相干体技术(Correlation)第二代相干体技术:基于相似的相干体技术(Semblance)基于多道相似的相干体…...
作为测试我们应该关注redis哪些方面
1、功能测试 数据结构操作:验证字符串、列表、哈希、集合和有序的基本操作是否正确 持久化:测试aof和aof持久化机制,确保数据在开启后正确恢复。 事务:检查事务的原子性和回滚机制。 发布订阅:确保消息正确传递。 2、性…...
Yii2项目自动向GitLab上报Bug
Yii2 项目自动上报Bug 原理 yii2在程序报错时, 会执行指定action, 通过重写ErrorAction, 实现Bug自动提交至GitLab的issue 步骤 配置SiteController中的actions方法 public function actions(){return [error > [class > app\helpers\web\ErrorAction,],];}重写Error…...
