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实现隐马尔科夫模型HMM

    python实现隐马尔科夫模型HMM

    这篇文章主要为大家详细介绍了python实现隐马尔科夫模型HMM,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-03-03
  • Python必备技巧之字典(Dictionary)详解

    Python必备技巧之字典(Dictionary)详解

    Python中的字典由于是对象的集合属于复合数据类型,类似于列表。本文将通过示例详细讲解Python中字典的使用方法,感兴趣的可以了解一下
    2022-03-03
  • python异常和文件处理机制详解

    python异常和文件处理机制详解

    这篇文章主要介绍了python异常和文件处理机制,详细分析了Python异常处理的常用语句、使用方法及相关注意事项,需要的朋友可以参考下
    2016-07-07
  • numpy求矩阵的特征值与特征向量(np.linalg.eig函数用法)

    numpy求矩阵的特征值与特征向量(np.linalg.eig函数用法)

    这篇文章主要介绍了numpy求矩阵的特征值与特征向量(np.linalg.eig函数用法),具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-02-02
  • python正则表达式实现自动化编程

    python正则表达式实现自动化编程

    这篇文章主要介绍了python正则表达式实现自动化编程,re模块的compile()方法是构成正则表达式的方法,向compile()传入一个字符串表示正则表达式,该方法返回一个Regex模式的对象,需要的朋友可以参考下
    2023-01-01
  • python如何判断IP地址合法性

    python如何判断IP地址合法性

    这篇文章主要为大家详细介绍了python如何判断IP地址合法性,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-04-04
  • 从Python的源码浅要剖析Python的内存管理

    从Python的源码浅要剖析Python的内存管理

    这篇文章主要介绍了从Python的源码浅要剖析Python的内存管理,需要的朋友可以参考下
    2015-04-04
  • Python求均值,方差,标准差的实例

    Python求均值,方差,标准差的实例

    今天小编就为大家分享一篇Python求均值,方差,标准差的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-06-06
  • Python装饰器中@property使用详解

    Python装饰器中@property使用详解

    大家好,本篇文章主要讲的是Python装饰器中@property使用详解,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下
    2022-01-01
  • 基于Python编写一个文档密码移除工具

    基于Python编写一个文档密码移除工具

    保护文档内容是常见的需求,但有时我们可能会忘记或丢失文档的密码,导致无法访问重要信息,本文将介绍如何使用Python创建一个简单而实用的文档密码移除工具,需要的可以参考下
    2023-12-12

最新评论