Python使用PIL進行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) # 獲取滑塊的值作為壓縮質(zhì)量 quality = self.quality_slider.GetValue() # 在文件名中添加后綴"_壓縮+質(zhì)量" 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()
在現(xiàn)代社交媒體和互聯(lián)網(wǎng)時代,照片的分享和傳輸已經(jīng)成為我們生活中的重要組成部分。然而,高分辨率的照片文件經(jīng)常會占用大量的存儲空間和帶寬,限制了它們在網(wǎng)絡(luò)上的傳輸速度和可用性。為了解決這個問題,圖像壓縮成為了一種常見的解決方案。
本文將介紹如何使用Python編程語言和wxPython圖形用戶界面庫,通過簡單的幾行代碼實現(xiàn)JPEG圖像的壓縮功能。我們還將加入一個滑塊控件,使用戶可以自定義壓縮質(zhì)量,并將壓縮后的照片另存為原始文件名加上后綴"壓縮+質(zhì)量數(shù)字"的新文件。
準備工作
在開始之前,確保您已經(jīng)安裝了Python和wxPython庫??梢允褂胮ip命令進行安裝:
pip install wxPython
此外,我們還需要安裝Python的圖像處理庫Pillow:
pip install Pillow
編寫代碼
我們首先導(dǎo)入所需的庫:
import wx import os from PIL import Image
然后,我們創(chuàng)建一個ImageCompressor
類作為我們的應(yīng)用程序窗口,并設(shè)置基本的界面元素,包括文件選擇器和滑塊控件。
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()
接下來,我們獲取滑塊的值作為壓縮質(zhì)量,并構(gòu)造新的文件名。
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)
運行程序
在主程序中,我們創(chuàng)建一個應(yīng)用程序?qū)嵗@示窗口。
if __name__ == '__main__': app = wx.App() frame = ImageCompressor(None, "Image Compressor") frame.Show() app.MainLoop()
運行程序后,您將看到一個簡單的窗口,可以選擇JPEG圖像文件并通過滑塊控制壓縮質(zhì)量。點擊"Compress"按鈕后,程序?qū)嚎s選中的圖像,并另存為原始文件名加上后綴"_壓縮+質(zhì)量"的新文件。
結(jié)論
本文介紹了如何使用Python和wxPython庫進行JPEG圖像壓縮的簡易教程。通過添加滑塊控件,我們可以方便地調(diào)整壓縮質(zhì)量,并將壓縮后的照片另存為新文件。這種方法可以幫助我們在保持圖像質(zhì)量的同時,減小文件大小,提高圖像在網(wǎng)絡(luò)上的傳輸速度和可用性。
通過了解和掌握這種簡單的圖像壓縮技術(shù),我們可以更好地處理和分享照片,提高工作效率和用戶體驗。希望本文對您學(xué)習(xí)和使用Python進行圖像處理有所幫助。
請注意,本文只是一個簡單的示例,您可以根據(jù)自己的需求進行進一步的定制和擴展。祝您在圖像處理的旅程中取得成功!
以上就是Python使用PIL進行JPEG圖像壓縮的簡易教程的詳細內(nèi)容,更多關(guān)于Python PIL進行JPEG圖像壓縮的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Python SMTP發(fā)送郵件遇到的一些問題及解決辦法
今天小編就為大家分享一篇關(guān)于Python SMTP發(fā)送郵件遇到的一些問題及解決辦法,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧2018-10-10python使用標準庫根據(jù)進程名如何獲取進程的pid詳解
Python有一套很有用的標準庫(standard library)。標準庫會隨著Python解釋器,一起安裝在你的電腦中的,所以下面這篇文章主要給大家介紹了關(guān)于python使用標準庫根據(jù)進程名如何獲取進程pid的相關(guān)資料,需要的朋友可以參考下。2017-10-10Python中使用matplotlib繪制mqtt數(shù)據(jù)實時圖像功能
這篇文章主要介紹了Python中使用matplotlib繪制mqtt數(shù)據(jù)實時圖像,本代碼中publish是一個死循環(huán),數(shù)據(jù)一直往外發(fā)送,詳細代碼跟隨小編一起通過本文學(xué)習(xí)下吧2021-09-09Python實現(xiàn)查找二叉搜索樹第k大的節(jié)點功能示例
這篇文章主要介紹了Python實現(xiàn)查找二叉搜索樹第k大的節(jié)點功能,結(jié)合實例形式分析了Python二叉搜索樹的定義、查找、遍歷等相關(guān)操作技巧,需要的朋友可以參考下2019-01-01Python中表達式x += y和x = x+y 的區(qū)別詳解
這篇文章主要跟大家介紹了關(guān)于Python中x += y和x = x+y 的區(qū)別的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起看看吧。2017-06-06