Python使用PIL进行JPEG图像压缩的简易教程

 更新时间:2023年09月28日 08:45:30   作者:winfredzhang  
本文介绍了如何使用Python编程语言和wxPython图形用户界面库进行JPEG图像的压缩,通过添加滑块控件,我们可以调整压缩质量,并将压缩后的照片另存为原来的名称加上后缀"压缩+质量数字"的新文件,需要的朋友可以参考下

C:\pythoncode\new\image2small.py

完整代码:

import wx
import os
from PIL import Image
class ImageCompressor(wx.Frame):
    def __init__(self, parent, title):
        super(ImageCompressor, self).__init__(parent, title=title, size=(400, 250))
        panel = wx.Panel(self)
        vbox = wx.BoxSizer(wx.VERTICAL)
        self.file_picker = wx.FilePickerCtrl(panel, message="选择照片", wildcard="JPEG files (*.jpg)|*.jpg",
                                             style=wx.FLP_USE_TEXTCTRL)
        vbox.Add(self.file_picker, proportion=1, flag=wx.EXPAND | wx.ALL, border=10)
        self.quality_slider = wx.Slider(panel, value=95, minValue=0, maxValue=99, style=wx.SL_HORIZONTAL)
        vbox.Add(self.quality_slider, proportion=1, flag=wx.EXPAND | wx.ALL, border=10)
        compress_button = wx.Button(panel, label="Compress")
        compress_button.Bind(wx.EVT_BUTTON, self.on_compress)
        vbox.Add(compress_button, proportion=1, flag=wx.ALIGN_CENTER | wx.ALL, border=10)
        panel.SetSizer(vbox)
        self.Center()
    def on_compress(self, event):
        file_path = self.file_picker.GetPath()
        if file_path:
            image = Image.open(file_path)
            compressed_image = image.copy()
            # 获取原始文件的目录和文件名
            directory, filename = os.path.split(file_path)
            # 获取滑块的值作为压缩质量
            quality = self.quality_slider.GetValue()
            # 在文件名中添加后缀"_压缩+质量"
            compressed_filename = os.path.splitext(filename)[0] + f"_压缩{quality}.jpg"
            # 将压缩后的图像另存为新文件
            compressed_image.save(os.path.join(directory, compressed_filename), "JPEG", quality=quality)
            wx.MessageBox("照片已压缩并另存为:" + compressed_filename, "压缩成功", wx.OK | wx.ICON_INFORMATION)
if __name__ == '__main__':
    app = wx.App()
    frame = ImageCompressor(None, "Image Compressor")
    frame.Show()
    app.MainLoop()

在现代社交媒体和互联网时代,照片的分享和传输已经成为我们生活中的重要组成部分。然而,高分辨率的照片文件经常会占用大量的存储空间和带宽,限制了它们在网络上的传输速度和可用性。为了解决这个问题,图像压缩成为了一种常见的解决方案。

本文将介绍如何使用Python编程语言和wxPython图形用户界面库,通过简单的几行代码实现JPEG图像的压缩功能。我们还将加入一个滑块控件,使用户可以自定义压缩质量,并将压缩后的照片另存为原始文件名加上后缀"压缩+质量数字"的新文件。

准备工作

在开始之前,确保您已经安装了Python和wxPython库。可以使用pip命令进行安装:

pip install wxPython

此外,我们还需要安装Python的图像处理库Pillow:

pip install Pillow

编写代码

我们首先导入所需的库:

import wx
import os
from PIL import Image

然后,我们创建一个ImageCompressor类作为我们的应用程序窗口,并设置基本的界面元素,包括文件选择器和滑块控件。

class ImageCompressor(wx.Frame):
    def __init__(self, parent, title):
        super(ImageCompressor, self).__init__(parent, title=title, size=(400, 250))
        panel = wx.Panel(self)
        vbox = wx.BoxSizer(wx.VERTICAL)
        self.file_picker = wx.FilePickerCtrl(panel, message="选择照片", wildcard="JPEG files (*.jpg)|*.jpg",
                                             style=wx.FLP_USE_TEXTCTRL)
        vbox.Add(self.file_picker, proportion=1, flag=wx.EXPAND | wx.ALL, border=10)
        self.quality_slider = wx.Slider(panel, value=95, minValue=0, maxValue=99, style=wx.SL_HORIZONTAL)
        vbox.Add(self.quality_slider, proportion=1, flag=wx.EXPAND | wx.ALL, border=10)
        compress_button = wx.Button(panel, label="Compress")
        compress_button.Bind(wx.EVT_BUTTON, self.on_compress)
        vbox.Add(compress_button, proportion=1, flag=wx.ALIGN_CENTER | wx.ALL, border=10)
        panel.SetSizer(vbox)
        self.Center()

on_compress方法中,我们获取用户选择的图像文件路径,并使用Pillow库打开图像。

def on_compress(self, event):
    file_path = self.file_picker.GetPath()
    if file_path:
        image = Image.open(file_path)
        compressed_image = image.copy()

接下来,我们获取滑块的值作为压缩质量,并构造新的文件名。

        directory, filename = os.path.split(file_path)
        quality = self.quality_slider.GetValue()
        compressed_filename = os.path.splitext(filename)[0] + f"_压缩{quality}.jpg"

最后,我们将压缩后的图像另存为新文件。

        compressed_image.save(os.path.join(directory, compressed_filename), "JPEG", quality=quality)

运行程序

在主程序中,我们创建一个应用程序实例,并显示窗口。

if __name__ == '__main__':
    app = wx.App()
    frame = ImageCompressor(None, "Image Compressor")
    frame.Show()
    app.MainLoop()

运行程序后,您将看到一个简单的窗口,可以选择JPEG图像文件并通过滑块控制压缩质量。点击"Compress"按钮后,程序将压缩选中的图像,并另存为原始文件名加上后缀"_压缩+质量"的新文件。

结论

本文介绍了如何使用Python和wxPython库进行JPEG图像压缩的简易教程。通过添加滑块控件,我们可以方便地调整压缩质量,并将压缩后的照片另存为新文件。这种方法可以帮助我们在保持图像质量的同时,减小文件大小,提高图像在网络上的传输速度和可用性。

通过了解和掌握这种简单的图像压缩技术,我们可以更好地处理和分享照片,提高工作效率和用户体验。希望本文对您学习和使用Python进行图像处理有所帮助。

请注意,本文只是一个简单的示例,您可以根据自己的需求进行进一步的定制和扩展。祝您在图像处理的旅程中取得成功!

以上就是Python使用PIL进行JPEG图像压缩的简易教程的详细内容,更多关于Python PIL进行JPEG图像压缩的资料请关注脚本之家其它相关文章!

相关文章

  • python的函数和方法(中)

    python的函数和方法(中)

    这篇文章主要为大家详细介绍了python的函数和方法,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-11-11
  • Python SMTP发送邮件遇到的一些问题及解决办法

    Python SMTP发送邮件遇到的一些问题及解决办法

    今天小编就为大家分享一篇关于Python SMTP发送邮件遇到的一些问题及解决办法,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2018-10-10
  • 用Python抢过年的火车票附源码

    用Python抢过年的火车票附源码

    离过年时间也不久了,还是预订春节火车票了,现在有好多平台都可以帮助大家抢购火车,下面小编给大家介绍用python抢过年的火车票附源码,对pthon抢火车票相关知识感兴趣的朋友一起学习吧
    2015-12-12
  • python线程类改变类变量的操作代码

    python线程类改变类变量的操作代码

    这篇文章主要介绍了python线程类改变类变量的操作代码,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2024-01-01
  • python中实现修改图像分辨率大小

    python中实现修改图像分辨率大小

    这篇文章主要介绍了python中实现修改图像分辨率大小问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-03-03
  • python使用标准库根据进程名如何获取进程的pid详解

    python使用标准库根据进程名如何获取进程的pid详解

    Python有一套很有用的标准库(standard library)。标准库会随着Python解释器,一起安装在你的电脑中的,所以下面这篇文章主要给大家介绍了关于python使用标准库根据进程名如何获取进程pid的相关资料,需要的朋友可以参考下。
    2017-10-10
  • Python中使用matplotlib绘制mqtt数据实时图像功能

    Python中使用matplotlib绘制mqtt数据实时图像功能

    这篇文章主要介绍了Python中使用matplotlib绘制mqtt数据实时图像,本代码中publish是一个死循环,数据一直往外发送,详细代码跟随小编一起通过本文学习下吧
    2021-09-09
  • Python实现查找二叉搜索树第k大的节点功能示例

    Python实现查找二叉搜索树第k大的节点功能示例

    这篇文章主要介绍了Python实现查找二叉搜索树第k大的节点功能,结合实例形式分析了Python二叉搜索树的定义、查找、遍历等相关操作技巧,需要的朋友可以参考下
    2019-01-01
  • Python中表达式x += y和x = x+y 的区别详解

    Python中表达式x += y和x = x+y 的区别详解

    这篇文章主要跟大家介绍了关于Python中x += y和x = x+y 的区别的相关资料,文中通过示例代码介绍的非常详细,对大家具有一定的参考学习价值,需要的朋友们下面来一起看看吧。
    2017-06-06
  • 详解Python当中的字符串和编码

    详解Python当中的字符串和编码

    这篇文章主要介绍了详解Python当中的字符串和编码,代码基于Python2.x版本,文中所述皆是Python学习中的基础知识,需要的朋友可以参考下
    2015-04-04

最新评论