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

摘要: 本文介绍了如何使用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进行图像处理有所帮助。

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

参考链接:

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值