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

news2024/7/4 4:32:52

导语:
在数字时代,我们经常处理大量的图像文件,无论是个人照片、网络图片还是工作中的设计素材。然而,随着图像数量的增多,存储和传输这些文件可能会成为一个挑战。幸运的是,我们可以利用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编程来处理图像压缩有所帮助。

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

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

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

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

相关文章

基于Springboot影城管理系统设计与实现

** 🍅点赞收藏关注 → 私信领取本源代码、数据库🍅 本人在Java毕业设计领域有多年的经验,陆续会更新更多优质的Java实战项目,希望你能有所收获,少走一些弯路。🍅关注我不迷路🍅** 一、研究背景…

基于JAVA的数码产品应用平台设计与实现【附项目源码】分享

基于JAVA的数码产品应用平台设计与实现: 源码地址:https://download.csdn.net/download/weixin_43894652/88842576 基于Web的数码产品应用平台设计与实现需求文档 一、引言 随着科技的飞速发展和数码产品的普及,用户对于获取数码产品信息…

计算机网络面经八股-HTTP常见的状态码有哪些?

常见状态码: 200:服务器已成功处理了请求。 通常,这表示服务器提供了请求的网页。301 : (永久移动) 请求的网页已永久移动到新位置。 服务器返回此响应(对 GET 或 HEAD 请求的响应)时,会自动将请求者转到新位置。302&…

openssl3.2 - exp - export ecc pubkey from ecc priv key

文章目录 openssl3.2 - exp - export ecc pubkey from ecc priv key概述笔记END openssl3.2 - exp - export ecc pubkey from ecc priv key 概述 前面实验已经生成了ECC私钥, 现在做从ECC私钥(内容为公私钥对, 里面既有私钥信息, 也有公钥信息)导出ECC公钥. 实验对应的命令行…

Liunx文件系统和基础IO

文件系统和基础IO 基础IOc语言基础IO函数当前路径和标准流系统IO系统调用函数重定向FILE文件结构体 在谈缓存区问题理解文件系统初识inode 基础IO c语言基础IO函数 打开与关闭 FILE *fopen(char *filename, const char *mode);选项还可以是 r/w/a 意味着为可读可写打开。 2…

Java异常分类(二)

RuntimeException 运行时异常: 派生于 RuntimeException 的异常,如被 0 除、数组下标越界、空指针等,其产生比较频繁,处理麻烦,如果显式的声明或捕获将会对程序可读性和运行效率影响很大。因此由系统自动检测并将它们交…

Vcenter 定制创建 Rocky Linux 虚拟机

文章目录 1. 图形化安装2. 初始化配置 1. 图形化安装 2. 初始化配置 Centos 8.2 指南

基于YOLOv8/YOLOv7/YOLOv6/YOLOv5的商品识别系统(深度学习+UI界面+训练数据集+Python代码)

摘要:在零售行业的技术进步中,开发商品识别系统扮演着关键角色。本博文详细阐述了如何利用深度学习技术搭建一个高效的商品识别系统,并分享了一套完整的代码实现。系统采用了性能强劲的YOLOv8算法,同时对YOLOv7、YOLOv6、YOLOv5等…

RabbitMQ 面试题及答案整理,最新面试题

RabbitMQ的核心组件有哪些? RabbitMQ的核心组件包括: 1、生产者(Producer): 生产者是发送消息到RabbitMQ的应用程序。 2、消费者(Consumer): 消费者是接收RabbitMQ消息的应用程序…

L2-035 完全二叉树的层序遍历(Python)

L2-035 完全二叉树的层序遍历 分数 25 全屏浏览 切换布局 作者 陈越 单位 浙江大学 一个二叉树,如果每一个层的结点数都达到最大值,则这个二叉树就是完美二叉树。对于深度为 D 的,有 N 个结点的二叉树,若其结点对应于相同深度…

吴恩达 x Open AI ChatGPT ——如何写出好的提示词视频核心笔记

核心知识点脑图如下: 1、第一讲:课程介绍 要点1: 上图展示了两种大型语言模型(LLMs)的对比:基础语言模型(Base LLM)和指令调整语言模型(Instruction Tuned LLM&#xff0…

[LeetCode][110]平衡二叉树

题目 110.平衡二叉树 给定一个二叉树,判断它是否是平衡二叉树。 示例 1: 输入:root [3,9,20,null,null,15,7] 输出:true 示例 2: 输入:root [1,2,2,3,3,null,null,4,4] 输出:false 示例 3&…

基于YOLOv8/YOLOv7/YOLOv6/YOLOv5的农作物害虫检测系统(深度学习模型+UI界面+训练数据集)

摘要:开发农作物害虫检测系统对于提高农业生产效率和作物产量具有关键作用。本篇博客详细介绍了如何运用深度学习构建一个农作物害虫检测系统,并提供了完整的实现代码。该系统基于强大的YOLOv8算法,并对比了YOLOv7、YOLOv6、YOLOv5&#xff0…

惬意上手Redis

Redis介绍 Redis(全称为REmote Dictionary Server)是一个开源的、内存中的数据存储结构,主要用作应用程序缓存或快速相应数据库。 REmote Dictionary Server: 有道翻译Redis是“远程字典服务”,远程不过是远程访问,而…

大模型学习笔记六:Semantic Kernel

文章目录 一、Semantic Kernel介绍和发展1)SK 的语言开发进展2)SK的生态位3)SK基础架构 二、环境搭建1)初始化2)Semantic Functions(不用编写代码,用配置实现回调函数)3)…

vb oe20.03 ssh nat

环境 virtual boxopeneuler 20.03 LTS网络设置 nat 主机端口可以自行设置,其余三项固定不变。然后即可通过ssh进行连接。

Dynamic Wallpaper v17.4 mac版 动态视频壁纸 兼容 M1/M2

Dynamic Wallpaper Engine 是一款适用于 Mac 电脑的视频动态壁纸, 告别单调的静态壁纸,拥抱活泼的动态壁纸。内置在线视频素材库,一键下载应用,也可导入本地视频,同时可以将视频设置为您的电脑屏保。 应用介绍 Dynam…

pycharm @NotNull parameter ‘module‘ of ...

下载了最新pycharm ,无法启动运行 pycharm或者idea中Run/Debug Python项目报错 Argument for NotNull parameter ‘module‘ of … 解决方案 删除项目根目录的 idea 文件夹 随后重启,重新配置即可

探索Linux世界:基本指令(文件查看、时间相关、grep、打包压缩及相关知识)

今天继续介绍一些指令 文章目录 1.cat - 查看文件1.1输出重定向和追加重定向1.2指令echo 2.more 指令3.less - 逐页查看文本文件内容4.head- 显示文件开头部分内容5.tail - 显示文件末尾部分内容5.1输入重定向&#xff08;<&#xff09;5.2管道&#xff08;|&#xff09; 6.…

第2篇【Docker项目实战】使用Docker部署Raneto知识库平台(转载)

【Docker项目实战】使用Docker部署Raneto知识库平台 一、Raneto介绍 1.1 Raneto简介 Raneto是一个免费、开放、简单的 Markdown 支持的 Node.js 知识库。 1.2 知识库介绍 知识库 知识库是指存储和组织知识的系统或库&#xff0c;它包括了各种类型的信息和知识&#xff0c;如…