图像压缩神器:使用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.mzph.cn/news/732509.shtml

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

相关文章

【Git】项目源码迁移到另一个gitlab(保留原来提交历史记录)

目录 前情提要迁移方案IDEA远程仓库管理团队其他成员切换gitgit命令操作界面 前情提要 公司原来是自己私有部署的gitlab。有了研发云后就希望将代码推送到研发云的代码仓库上。这时候需要迁移并保留原来提交的历史记录。 迁移方案 登录新的gitlab(代码仓库)新建空白项目获取…

如何搭建selenium自动化测试框架?selenium自动化测试环境搭建(webdriver+Python框架)

一、安装Python 选择Python版本后,进入Python官方网站下载适配机型版本:http://www.python.org/ 二、安装setuptools和pip setuptools下载地址:https://pypi.python.org/pypi/setuptools pip下载地址:https://pypi.python.org/py…

BUUCTF----[极客大挑战 2019]HardSQL

输入1’ 单引号闭合 进行永真式判断 竟然说我是臭弟弟----八嘎(肯定是进行了过滤) 经过手法判断,过滤了,空格,and等报错注入updatexml() 报错注入顾名思义就是,通过特殊函数错误使用并使其输出错误结果来获…

性能测试能力提升 —— 线程、并发、吞吐量、TPS、QPS、响应时间

一、背景 接着上一篇的知识:性能测试能力提升-关于性能测试,本篇文章,我们将主要介绍以下几方面的知识: 线程数&并发用户数相对并发&绝对并发吞吐量TPS&QPS响应时间 二、线程数、并发用户数 线程数: 主流的性能测…

Android Studio轮播图使用失败怎么办【已解决】

Android Studio轮播图使用失败怎么办 1.在gethub上面搜索轮播图 2.选择要使用的轮播图 3.查看该轮播图的配置方法 4.复制该依赖放入build.gradle中 5.重新构建 6.使用banner 发现没有报错了 7.参考网址 https://github.com/youth5201314/banner

解读BOT攻击,探索灵活高效的防护之道

回顾早期的互联网应用,由于业务流量比较小,往往单台服务器就能满足负载需求。随着互联网的流量越来越大,单服务器已经不能满足业务需求,无论它优化得再好,都较难承受大量的访问压力。支持负载均衡的技术很多&#xff0…

微信加好友频繁会被封号吗?

微信加好友频繁会被封号吗? 微信规定,每个人每天最多可以加20个好友,但一天之内如果频繁加好友,微信可能会出现异常提示,需要暂停好友添加操作。 面对微信上突如其来的大量好友申请,一定要谨慎处理,以免被…

【开源】SpringBoot框架开发教学资源共享平台

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 课程档案模块2.3 课程资源模块2.4 课程作业模块2.5 课程评价模块 三、系统设计3.1 用例设计3.2 类图设计3.3 数据库设计3.3.1 课程档案表3.3.2 课程资源表3.3.3 课程作业表3.3.4 课程评价表 四、系统展…

运维:记一次寻找定时任务并删除的经历

前言 我相信接手别人的服务器、或者在没有任何文档的情况去看自己原先的服务器,都或多或少会遇到莫名其妙的服务器独有规则。 比如你服务本身跑的好好的,突然啪的一下,没了! 什么原因导致的呢?其中,很大可能是定时任务在作祟。 原因分析 本次,我遇到的问题是:在Ubuntu系…

一分钟了解遥感中卫星、传感器、波段及数据之间的关系

感是利用卫星、飞机或其他载具上的传感器对地球表面进行观测和测量的科学技术。以下是一些常见的遥感相关术语: 卫星(Satellite):在遥感中,卫星是指绕地球轨道运行的人造卫星,其主要任务是携带各种传感器从空间中对地球表面进行观测。 传感器(Sensor):传感器是安装在卫…

鸿蒙Harmony应用开发—ArkTS声明式开发(基础手势:ImageSpan)

Text组件的子组件,用于显示行内图片。 说明: 该组件从API Version 10开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 子组件 无 接口 ImageSpan(value: ResourceStr | PixelMap) 参数: 参数名参数类…

抓包工具获取请求信息

Charles 下载安装 下载 官方下载地址:https://www.charlesproxy.com/latest-release/download.do 下载后傻瓜式安装就好,这个官方的需要激活,可以选择绿色版或者学习版 绿色版 绿色中文版:https://soft.kxdw.com/pc/Charles.z…

笔记78:软件包管理工具 apt 详解(包含常用 apt 命令介绍)

一、Ubuntu 的包管理工具 apt 过去,软件通常是从源代码安装的,安装步骤为:​​​​​​ 在Github上下载该软件的源码文件;查看Github上这个软件项目中提供的自述文件(通常包含配置脚本或 makefile 文件)&a…

Harbor二次开发前端环境搭建

1 前端开发环境搭建 (1)拉取分支代码 (2)前端开发推荐使用VsCode编辑器打开项目 打开 harbor\src\portal 文件夹,该文件夹为Harbor对应的前端代码所在位置 (3)在portal文件夹下创建名为 pro…

【Springer出版 · EI检索】| 第二届先进无人飞行系统国际会议(ICAUAS 2024)

会议简介 Brief Introduction 2024年第二届先进无人飞行系统国际会议(ICAUAS 2024) 会议时间:2024年6月14日-16日 召开地点:中国南昌 大会官网:ICAUAS 2024-2024 2nd International Conference on Advanced Unmanned Aerial Systems2024 2nd …

java SSM汽车租赁管理系统myeclipse开发mysql数据库springMVC模式java编程计算机网页设计

一、源码特点 java SSM汽车租赁管理系统是一套完善的web设计系统(系统采用SSM框架进行设计开发,springspringMVCmybatis),对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用…

江大白 | 万字长文,算法工程师的深度经验总结!(建议阅读收藏!)

本文来源公众号“OpenCV与AI深度学习”,仅用于学术分享,侵权删,干货满满。 原文链接:万字长文,算法工程师的深度经验总结! 以下文章来源于知乎:机智的叉烧 链接:https://zhuanlan…

JAVA实战开源项目:智能停车场管理系统(Vue+SpringBoot)

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、研究内容A. 车主端功能B. 停车工作人员功能C. 系统管理员功能1. 停车位模块2. 车辆模块3. 停车记录模块4. IC卡模块5. IC卡挂失模块 三、界面展示3.1 登录注册3.2 车辆模块3.3 停车位模块3.4 停车数据模块3.5 IC卡档案模块3.6 IC卡挂…

opengl 学习(三)-----纹理

纹理就是贴图 分类前提demo效果解析 分类 前提 需要使用一个库来处理图片&#xff1a;#include <stb_image.h> https://github.com/nothings/stb 你下载好了之后&#xff0c;把目目录包含了就好 然后再引入 #define STB_IMAGE_IMPLEMENTATION #include "stb_i…

git删除comimit提交的记录

文章目录 本地的删除远程同步修改上次提交更多详情阅读 本地的删除 例如我的提交历史如下 commit 58211e7a5da5e74171e90d8b90b2f00881a48d3a Author: test <test36nu.com> Date: Fri Sep 22 20:55:38 2017 0800add d.txtcommit 0fb295fe0e0276f0c81df61c4fd853b7a00…