Python使用PIL进行JPEG图像压缩的简易教程
作者:winfredzhang
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图像压缩的资料请关注脚本之家其它相关文章!