图像压缩神器:使用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 Image

class 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编程来处理图像压缩有所帮助。

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

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

混合测试写一写

题目 服务器IP地址规划:client:12.0.0.12/24,网关服务器:ens36:12.0.0.1/24、ens33:192.168.44.1/24,Web1:192.168.44.30/24,Web2:192.168.44.50/24,Nginx&am…

基于前后端分离技术做增删改查操作(SpringBoot+Mybatis Plus+Vue)

通过SpringBoot后端项目,mybatis plus,和前端Vue来实现前后端分离技术 第一步: 1、准备sql 本项目主要实现两张表的增删改查(老师专业)分页 CREATE TABLE teacher (id int(11) NOT NULL AUTO_INCREMENT,name varch…

日常超实用技巧(一)

目录 场景说明 mysql解决 excel解决 vscode插件解决 notepad解决 扩展解决 正则解决 自动录制宏解决 场景说明 平常在开发中有时会遇到一些字符串的规整或者格式化的操作,这点在操作数据库时经常常见,但是有的时候却有这种需求,就是我们的修改条件是某个查询条件的字…

第三方软件测评机构出具软件测试报告的流程简析

第三方软件测评机构是独立于软件开发方和需求方的第三者机构,负责对软件进行全面的评估和测试。独立存在使得出具的测试结果会更客观公正。相比之下,软件开发方进行的测评工作往往存在着主观性和局限性,很难全面评估软件的各个方面。 第三方…

Linux操作系统-06-进程与服务管理

使用ps命令查看进程。包括过滤进程信息 使用systemctl命令管理和运行Linux服务 进程(Process):操作系统正在运行的应用程序。任意一个进程,都会消耗CPU和内存资源, 服务(Service)&#xff1a…

C# Onnx C2PNet 图像去雾 室外场景

目录 介绍 效果 模型信息 项目 代码 下载 C# Onnx C2PNet 图像去雾 室外场景 介绍 github地址:https://github.com/YuZheng9/C2PNet [CVPR 2023] Curricular Contrastive Regularization for Physics-aware Single Image Dehazing 效果 模型信息 Model P…

Docker安装Prometheus监控

环境初始化 关闭防火墙 setenforce 0 vim /etc/selinux/config ##################内部代码################### SELINUXdisabled #关闭防火墙 ############################################ 安装docker #卸载yum源之前的docker安装包 sudo yum remove docker docker-clie…

打算考PMP,需要准备什么?

PMP是什么考试?是PMI设立的项目管理资格认证考试,旨在评估和确认候选人是否具备在各种项目环境中领导和管理项目的能力。 pmp考试不算简单,考前也需要更详细的了解考试情况才能更好的备考。文章不是很长,主要是可以让你快速的了解…

TSINGSEE青犀视频AI方案:数据+算力+算法,人工智能的三大基石

背景分析 随着信息技术的迅猛发展,人工智能(AI)已经逐渐渗透到我们生活的各个领域,从智能家居到自动驾驶,从医疗诊断到金融风控,AI的应用正在改变着我们的生活方式。而数据、算法和算力,正是构成…

IntelliJ IDEA Dev 容器

​一、dev 容器 开发容器(dev 容器)是一个 Docker 容器,配置为用作功能齐全的开发环境。 IntelliJ IDEA 允许您使用此类容器来编辑、构建和运行您的项目。 IntelliJ IDEA 还支持多个容器连接,这些连接可以使用 Docker Compose …

3588板子部署yoloV5

一 :准备 ubuntu linux X86_64系统 a.安装anaconda b.创建虚拟环境 python3.8 二: 下载rknn-toolkit2 传送门 unzip 解压文件夹 三:pt转onnx模型 四:onnx转rknn模型 a:cd到rknn-toolkit2-master/rknn-toolkit2/packag…

C++学习笔记:红黑树

红黑树 什么是红黑树红黑树的规则红黑树节点的定义红黑树的插入空树插入非空插入条件判断新插入的节点 cur 不为 root 且 parent->_col 为红就需要调整父节点为左 grandf->left parent当uncle节点为红色时,只需要进行颜色调整,即可当uncle为空 或 者存在但是为黑parent …

cnetos7 清理 journal 日志

journal 日志如果长时间不清理,会占用系统很多空间,所有需要清理占用过多的一些日志。 1、查看journal日志当前使用情况,包括占用的磁盘空间、日志数量 journalctl --disk-usage 2、清除 journal 日志中超过 100MB 大小的内容 journalctl -…

Lord 3DMCV7-AHRS 时间同步硬件触发设置

目的:通过FPGA发送脉冲触发IMU采集数据。FPGA发送脉冲时,IMU才有数据产生。 FPGA与IMU的硬件接线就不讲了,这里主要说明的是IMU的设置以及ROS驱动的config文件更改。 1. WIN上位机设置 通过IMU在WINDOWS的上位机SensorConnect对IMU的GPIO、波特率等基本功能进行设值,具体…

项目解决方案:视频监控接入和录像系统设计方案(下)

目 录 1.概述 2. 建设目标及需求 2.1建设总目标 2.2 需求描述 ​2.3 需求分析 3.设计依据与设计原则 3.1设计依据 3.2 设计原则 4.建设方案设计 4.1系统方案设计 4.2组网说明 5.产品介绍 5.1视频监控综合资源管理平台介绍 5.2视频录像服务器和存储 5.2.…

SpringController返回值和异常自动包装

今天遇到一个需求,在不改动原系统代码的情况下。将Controller的返回值和异常包装到一个统一的返回对象中去。 例如原系统的接口 public String myIp(ApiIgnore HttpServletRequest request);返回的只是一个IP字符串"0:0:0:0:0:0:0:1",目前接口…

Django入门 整体流程跑通

Django学习笔记 一、Django整体流程跑通 1.1安装 pip install django //安装 import django //在python环境中导入django django.get_version() //获取版本号,如果能获取到,说明安装成功Django目录结构 Python310-Scripts\django-admi…

噬菌体展示文库类型与应用-卡梅德生物

噬菌体展示抗体库构建的途径:目前主要有两种:一是有机合成法,二是基因合成法。前者是直接合成含有各种可能序列的短肽,构建至噬菌体载体。基因工程方法是将目的基因构建至载体,与噬菌体的pⅢ外壳蛋白融合表达。 卡梅德…

数据结构——堆的应用 堆排序详解

💞💞 前言 hello hello~ ,这里是大耳朵土土垚~💖💖 ,欢迎大家点赞🥳🥳关注💥💥收藏🌹🌹🌹 💥个人主页&#x…

制造业工厂的设备管理系统

对企业来说,时间就是金钱,所有企业都在极力避免因生产延误而导致的金钱损失。在设备保养、设备维护和设备运行方面更是如此。如果工厂的设备因突发故障处于长时间停机状态,但没能被及时解决,工厂所需支付的成本可能就会螺旋式上升…