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