图像压缩神器:使用wxPython和Pillow快速压缩JPEG文件

导语:
在数字时代,我们经常处理大量的图像文件,无论是个人照片、网络图片还是工作中的设计素材。然而,随着图像数量的增多,存储和传输这些文件可能会成为一个挑战。幸运的是,我们可以利用Python编程和两个强大的库——wxPython和Pillow,轻松地实现图像压缩的自动化过程。本文将介绍如何使用wxPython选择文件夹路径,并使用Pillow压缩JPEG文件,让你的图像占用更少的空间,同时保持良好的视觉质量。


正文:

引言

在当今数字化时代,我们每天都会处理大量的图像文件。无论是从手机相机中导出的个人照片,还是从互联网上下载的壁纸和图片资源,图像文件占据了我们电脑存储空间的很大一部分。为了更好地管理和共享这些图像,压缩它们是一个非常实用的方法。然而,手动逐个压缩图像文件费时费力,这时候我们可以借助Python编程来实现自动化的图像压缩过程。
C:\pythoncode\new\compressjpg.py

准备工作

在开始之前,我们需要确保已经安装了以下两个库:wxPython和Pillow。如果你还没有安装它们,可以使用以下命令进行安装:

pip install wxPython
pip install Pillow

创建GUI界面

我们将使用wxPython库来创建一个简单的GUI界面,它将帮助我们选择要压缩的文件夹路径。下面是代码片段:

# 代码片段1
import os
import wx
from PIL import Imageclass ImageCompressor(wx.Frame):def __init__(self, parent, title):super(ImageCompressor, self).__init__(parent, title=title, size=(400, 200))self.panel = wx.Panel(self)self.create_widgets()self.Show()def create_widgets(self):vbox = wx.BoxSizer(wx.VERTICAL)open_button = wx.Button(self.panel, label="选择文件夹")open_button.Bind(wx.EVT_BUTTON, self.on_open_button)vbox.Add(open_button, proportion=1, flag=wx.EXPAND|wx.ALL, border=10)self.panel.SetSizer(vbox)def on_open_button(self, event):dialog = wx.DirDialog(self, "选择文件夹路径", style=wx.DD_DEFAULT_STYLE)if dialog.ShowModal() == wx.ID_OK:folder_path = dialog.GetPath()self.compress_images(folder_path)dialog.Destroy()def compress_images(self, folder_path):processed_folder = os.path.join(folder_path, "processed")os.makedirs(processed_folder, exist_ok=True)for filename in os.listdir(folder_path):if filename.lower().endswith(".jpg"):image_path = os.path.join(folder_path, filename)processed_path = os.path.join(processed_folder, filename)with Image.open(image_path) as image:image.save(processed_path, optimize=True, quality=50)wx.MessageBox("图像压缩完成!", "完成", wx.OK | wx.ICON_INFORMATION)if __name__ == "__main__":app = wx.App()ImageCompressor(None, title="图像压缩")app.MainLoop()

图像压缩过程

在我们的代码中,我们使用了Pillow库来打开JPEG图像文件并进行压缩。下面是代码片段:

# 代码片段2
from PIL import Image# ...def compress_images(self, folder_path):processed_folder = os.path.join(folder_path, "processed")os.makedirs(processed_folder, exist_ok=True)for filename in os.listdir(folder_path):if filename.lower().endswith(".jpeg"):image_path = os.path.join(folder_path, filename)processed_path = os.path.join(processed_folder, filename)with Image.open(image_path) as image:image.save(processed_path, optimize=True, quality=50)

结果展示与总结

完成压缩后,我们将弹出一个消息框来通知用户压缩过程已完成。下面是代码片段:

# 代码片段3
import wx# ...def compress_images(self, folder_path):# ...wx.MessageBox("图像压缩完成!", "完成", wx.OK | wx.ICON_INFORMATION)

通过运行上述代码,我们可以得到一个简单而实用的图像压缩应用程序。用户只需点击"选择文件夹"按钮,选择要压缩的文件夹路径,然后程序将自动压缩该文件夹下的所有JPEG图像,并将压缩后的文件保存在新建的"processed"文件夹中。
压缩前:
在这里插入图片描述
压缩后:
在这里插入图片描述

结语

使用wxPython和Pillow库,我们能够轻松实现图像压缩的自动化过程。这个图像压缩神器不仅能够帮助我们节省存储空间,还可以加快图像在网络上的传输速度。希望本文对你理解如何使用Python编程来处理图像压缩有所帮助。

你可以根据自己的需求进一步扩展这个应用程序,例如添加进度条、支持其他图像格式等。通过将代码修改和适应,你可以创建自己的独特图像处理工具。

让我们摆脱图像文件过多的困扰,使用这个图像压缩神器,让我们的存储空间更有效率吧!

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

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

相关文章

全球首位AI软件工程师诞生,未来程序员会被取代吗?

今天早上看到一条消息,Cognition发布了世界首位AI程序员Devin,直接把我惊呆了,难道程序员是真要失业了吗? 全球首位AI软件工程师一亮相,直接引爆整个互联网圈。只需要一句指令,Devin就可以通过使用自己的s…

vue中ref 根据多选框所选数量,动态地变换box的高度

查看本专栏目录 关于作者 还是大剑师兰特:曾是美国某知名大学计算机专业研究生,现为航空航海领域高级前端工程师;CSDN知名博主,GIS领域优质创作者,深耕openlayers、leaflet、mapbox、cesium,canvas&#x…

【快速上手ProtoBuf】proto 3 语法详解

1 🍑字段规则🍑 消息的字段可以⽤下⾯⼏种规则来修饰: singular :消息中可以包含该字段零次或⼀次(不超过⼀次)。 proto3 语法中,字段默认使⽤该规则。repeated :消息中可以包含该…

2024年【危险化学品生产单位安全生产管理人员】复审考试及危险化学品生产单位安全生产管理人员模拟试题

题库来源:安全生产模拟考试一点通公众号小程序 危险化学品生产单位安全生产管理人员复审考试根据新危险化学品生产单位安全生产管理人员考试大纲要求,安全生产模拟考试一点通将危险化学品生产单位安全生产管理人员模拟考试试题进行汇编,组成…

Web前端基础引入

前言 简单说就是 DNS (Domain Name System) 解析 TCP (Transmission Control Protocol) 链接 HTTP (HyperText Transfer Protocol) 请求 HTTP 响应 HTML 解析 & CSS 渲染 JS 解析执行 【一] 前端、后端 【1】什么是前端 前端就是指网站、应用或者其他互联网相关产品…

【MySQL 系列】MySQL 索引篇

在 MySQL 中,索引是一种帮助存储引擎快速获取数据的数据结构,形象的说就是索引是数据的目录。它一般是以包含索引键值和一个指向索引键值对应数据记录物理地址的指针的节点的集合的清单的形式存在。通过使用索引, MySQL 可以在不需要扫描整个…

2024年【安全生产监管人员】及安全生产监管人员模拟考试题库

题库来源:安全生产模拟考试一点通公众号小程序 2024年【安全生产监管人员】及安全生产监管人员模拟考试题库,包含安全生产监管人员答案和解析及安全生产监管人员模拟考试题库练习。安全生产模拟考试一点通结合国家安全生产监管人员考试最新大纲及安全生…

【典】dp背包问题(树求方案)

回顾在acw上做过的题 有依赖的背包问题 这一题是与树相关的dp问题,根据父节点与子节点的相连关系,我们用dfs来处理根节点与子树的迭代更新,把每一颗最小单位子树看成一个物品,然后就有点像多重背包(因为有体积限制&…

电脑音频显示红叉怎么办?这里提供四种方法

前言 如果你在系统托盘中看到音量图标上的红色X,则表示你无法使用音频设备。即使音频设备未被禁用,当你运行音频设备疑难解答时,仍然会看到此错误。 你的电脑将显示已安装高清音频设备,但当你将鼠标悬停在图标上时,它将显示未安装音频输出设备。这是一个非常奇怪的问题,…

掌握抽象基础之20个必备原则,看完你还不会,你打我

抽象基础之20个必备原则 1. 面向对象编程(OOP)中抽象原则背后的基本思想是什么?2.抽象和封装的区别?3.提供一个现实生活中说明抽象的例子4.在编程语言中如何实现抽象?5.定义抽象类6.提供一个抽象类的真实世界场景7.解释…

【洛谷 P8744】[蓝桥杯 2021 省 A] 左孩子右兄弟 题解(深度优先搜索+贪心算法+树形DP+邻接表)

[蓝桥杯 2021 省 A] 左孩子右兄弟 题目描述 对于一棵多叉树,我们可以通过“左孩子右兄弟”表示法,将其转化成一棵二叉树。 如果我们认为每个结点的子结点是无序的,那么得到的二叉树可能不唯一。换句话说,每个结点可以选任意子结…

深度学习系列62:Agent入门

1 anget介绍和openai标准接口 agent的核心是其代理协同工作的能力。每个代理都有其特定的能力和角色,你需要定义代理之间的互动行为,即当一个代理从另一个代理收到消息时该如何回复。 agent目前大多使用openai标准接口调用LLM服务,说明如下。…