用python做一个压缩图片的小程序

学生正在学习图像的编码与压缩,记录一下这个python小程序,给他们提供一下帮助。需要用到PIL库,记得安装:

pip install pillow

python 复制代码
import tkinter as tk
from tkinter import filedialog 
from PIL import Image
import tkinter.messagebox as messagebox

class ImageCompressor:
    def __init__(self, window):
        self.window = window
        self.window.title("图片压缩工具By ZYX 2023")

        self.source_path = tk.StringVar()
        self.output_path = tk.StringVar()

        frame1 = tk.Frame(window)
        frame1.pack(padx=5, pady=5)

        lbl_source = tk.Label(frame1, text="原始图片路径:")
        lbl_source.pack(side=tk.LEFT)

        entry_source = tk.Entry(frame1,textvariable=self.source_path, width=40)
        entry_source.pack(side=tk.LEFT)

        btn_source =tk.Button(frame1, text="打开", command=self.open_source_image)
        btn_source.pack(side=tk.LEFT)

        frame2 = tk.Frame(window)
        frame2.pack(padx=5, pady=5)

        lbl_output = tk.Label(frame2, text="输出图片路径:")
        lbl_output.pack(side=tk.LEFT)

        entry_output = tk.Entry(frame2,textvariable=self.output_path, width=40)
        entry_output.pack(side=tk.LEFT)

        btn_output =tk.Button(frame2, text="保存", command=self.save_output_image)
        btn_output.pack(side=tk.LEFT)

        quality_label = tk.Label(window, text='质量(1-95):')
        quality_label.pack(pady=5)

        self.quality_slider = tk.Scale(window, from_=1, to=95,
            length=400,tickinterval=19,
            orient='horizontal', resolution=1)
        self.quality_slider.set(80)
        self.quality_slider.pack()

        btn_compress =tk.Button(window, text="开始压缩", command=self.compress_image)
        btn_compress.pack(pady=10)

    def open_source_image(self):
        file_path = filedialog.askopenfilename()
        self.source_path.set(file_path)

    def save_output_image(self):
        file_path = filedialog.asksaveasfilename(defaultextension=".jpg")
        self.output_path.set(file_path)

    def compress_image(self):
        try:
            img = Image.open(self.source_path.get())
            img.save(self.output_path.get(), "JPEG", quality=self.quality_slider.get())
            messagebox.showinfo("成功", "图片压缩成功!")
        except Exception as e:
            messagebox.showerror("失败", f"压缩过程中发生错误:{e}")

if __name__ == '__main__':
    window = tk.Tk()
    app = ImageCompressor(window)
    window.mainloop()
相关推荐
2601_962294619 分钟前
Python接口自动化测试实战:使用requests库
python·接口自动化测试·异常处理·requests库·api测试
砚底藏山河16 分钟前
【量化纯GET实战 #23】多股票相关性:用收益率看板块联动
java·数据库·python·金融·数据分析
阿童木写作20 分钟前
跨境电商翻译工具推荐:批量图片翻译+视频字幕实时翻译
人工智能·python·音视频
重生之我来学Python21 分钟前
Docker套装的简介、安装、超级详细教程
linux·docker·容器·eureka·github
晶捷软件21 分钟前
晶捷智能:集团型制造企业ERP如何实现多工厂统一管控
大数据·人工智能·python·制造
oyguyteggytrrwwwrt32 分钟前
闵可夫斯基差演示
python
智购科技无人售货机工厂店38 分钟前
2026自动售货机大屏交互设计原则:从信息层级到视觉动线的工程实践~YH
运维·python·单片机·嵌入式硬件·自动化·交互
quantdash_cc43 分钟前
量化数据源怎么选:稳定性、实时性和数据完整性到底该如何权衡?
开发语言·python·数据分析·量化交易·股票数据·quantdash
Ruiery1 小时前
Linux 6.6内核 PCIe 深度解析(十):PCIe Port Driver(portdrv)— 一个物理 Port,拆出五个逻辑服务
linux·运维·服务器
萧瑟余晖1 小时前
Java深入解析篇五十四之对象模型详解
java·开发语言